Ambil jam dan menit saja di query mysql

Pada MySQL, untuk penulisan tanggal juga terdapat format tersendiri. Hal ini juga berpengaruh ketika kita akan melakukan pencarian data berdasarkan tanggal. Ataupun memangkas data tanggal dan jam menjadi tanggal saja. Untuk itu, kita harus mengubah format penulisan tersebut menjadi date.

Baca juga :

  • Query Mengubah String Menjadi Date
  • Query Membuat Nomor Urut pada MySQL
  • Query yang Berhubungan dengan Waktu

Nah, berikut adalah format yang harus kamu ketahui untuk penulisan pada query MySQL.

FormatDescription%aNama kerja disingkat (Sun ke Sat)%bNama bulan disingkat (Jan ke Dec)%cBulan dalam angka (0 ke 12)%DUrutan tanggal sufix (1st, 2nd, 3rd, …)%dTanggal dalam bulan numeric  (01 ke 31)%eHari dalam bulan dengan angka (0 ke 31)%fMicroseconds (000000 to 999999)%HWaktu (00 to 23)%hJam (00 to 12)%IJam (00 to 12)%iMenit (00 to 59)%jUrutan hari dalam setahun (001 to 366)%kFormat 24 jam (0 to 23)%lFormat 12 jam (1 to 12)%MNama bulan full (January to December)%mBulan dalam angka (00 to 12)%pAM atau PM%rWaktu dalam 12 jam AM atau PM format (hh:mm:ss AM/PM)%SDetik (00 to 59)%sDetik (00 to 59)%TWaktu format 24 jam (hh:mm:ss)%UPekan dimana Sunday hari pertama dalam pekan (00 ke 53)%uPekan dimana Monday hari pertama dalam pekan (00 ke 53)%VPekan dimana Sunday hari pertama dalam pekan (01 ke 53). Gunakan %X%vPekan dimana Monday hari pertama dalam pekan (01 to 53). Gunakan %x%WNama hari (Sunday hingga Saturday)%wHari dalam pekan dimana Sunday=0 dan Saturday=6%XTahun untuk pekan di mana hari Sunday adalah hari pertama dalam pekan. Gunakan %V%xTahun untuk pekan di mana Monday adalah hari pertama dalam pekan. Gunakan %v%YTahun 4 digit angka%yTahun 2 digit angkaTable format tanggalPada format di atas, sekarang kita akan mencoba salah satunya dengan query berikut ini :
 
-- untuk menentukan tahun
SELECT DATE_FORMAT("2017-06-15", "%Y");

Kamu juga dapat mencoba format lainnya sesuai dengan tabel di atas. Nah, demikanlah Date Format pada Query MySQL yang wajib kita ketahui. Semoga bermanfaat.

Pengurangan tanggal maksudnya adalah untuk menghitung mundur, jatuh tanggal berapa misal 10 hari sebelum tanggal tertentu/sekarang. Adapun fungsi untuk menghitungnya adalah :

SUBDATE(date,INTERVAL expr unit), SUBDATE(expr,days)

Contoh :

mysql> SELECT DATE_SUB(‘2009-01-02’, INTERVAL 31 DAY);
+—————————————–+
| DATE_SUB(‘2009-01-02’, INTERVAL 31 DAY) |
+—————————————–+
| 2008-12-02 |
+—————————————–+
1 row in set (0.00 sec)

Penjelasan :
date : tanggal sekarang/tertentu
INTERVAL 31 DAY : dikurang 31 hari = 2009-12-08

Atau

mysql> SELECT SUBDATE(‘2009-01-02’, INTERVAL 31 DAY);
+—————————————-+
| SUBDATE(‘2009-01-02’, INTERVAL 31 DAY) |
+—————————————-+
| 2008-12-02 |
+—————————————-+
1 row in set (0.00 sec)

Mengubah Format Tanggal

Format tampilan tanggal di MySQL umumnya tahun-bulan-tanggal, nah biasanya kebiasaan kita tanggal formatnya adalah tanggal-bulan-tahun. Nah untuk membuat tampilan ini telah tersedia fungsi STR_TO_DATE().

STR_TO_DATE(str,format)
Data tanggal ketika dikenakan perintah SELECT hasilnya teks dengan format dd-mm-yyyy, maka untuk mengubah format teks tersebut bisa menggunakan DATE_FORMAT

Contoh:

mysql> SELECT DATE_FORMAT(‘2009-10-04 22:23:00’, ‘%W %M %Y’);
+————————————————+
| DATE_FORMAT(‘2009-10-04 22:23:00’, ‘%W %M %Y’) |
+————————————————+
| Sunday October 2009 |
+————————————————+
1 row in set (0.00 sec)

%W : hari dalam bahasa Inggris
%M : bulan dalam bahasa Inggris
%Y : tahun 4 digit

Contoh berkutnya :
Mengubah tampilan tanggal ke dd-mm-yyyy

mysql> SELECT DATE_FORMAT(‘2009-10-04 22:23:00’, ‘%d-%m-%Y’);
+————————————————+
| DATE_FORMAT(‘2009-10-04 22:23:00’, ‘%d-%m-%Y’) |
+————————————————+
| 04-10-2009 |
+————————————————+
1 row in set (0.00 sec)

mysql> SELECT DAYNAME(‘2007-02-03’);
+———————–+
| DAYNAME(‘2007-02-03’) |
+———————–+
| Saturday |
+———————–+
1 row in set (0.00 sec)

Mencari hari ke…. dalam minggu

Tanggal sekarang misalnya hari ke berapa? Dalam angka dari minggu sekarang. Untuk itu menggunakan fungsi DAYOFWEEK(date)

DAYOFWEEK(date)

Misalnya untuk menampilkan hari dalam bahasa Indonesia (Minggu, Senin, Selasa, Rabu…., Sabtu) kita bisa menciptakan fungsi sendiri dengan melibatkan fungsi DAYOFWEEK(), misalkan fungsinya duberi nama get_hari(date), lihat skrip berikut :

Contoh:

Ambil jam dan menit saja di query mysql

Untuk lebih lanjut penulisan format tanggal dan waktu seperti pada tabel berkut :

Hasil pengujian

mysql> SELECT now(), get_hari(now());
+———————+—————–+
| now() | get_hari(now()) |
+———————+—————–+
| 2009-11-09 14:45:29 | Senin |
+———————+—————–+
1 row in set, 1 warning (0.00 sec)

mysql>

Penjelasan:
get_hari(now()) : memanggil fungsi dengan parameter tanggal sekarang

Contoh Kasus Menghitung Jam Kerja Pegawai

Perhitungan jam kerja pegawai biasanya digunakan untuk sistem presensi. Ada permasalahan khusus jika jam datang dan jam pulang tanggalnya beda atau hari yang berbeda. Sebagai contoh untuk pegawai satpam misalnya untuk shift kerja yang malam biasanya datang jam 23.00 malam, dan pulang besok pagi jam 07.00, dengan demikian untuk menghitung jam kerjanya jadi negatif.
Jika anda menggunakan database MySQL jam kerja pegawai akan derekam sebaiknya menggunakan jenis field DateTime. Alasan penggunaan filed Datetime agar supaya peritungan jumlah jam bisa dihitung menggunakan perintah SQL. Jadi data yang tersimpan nanti berupa tanggal dan jam.

Contoh:
Buatlah rancangan tabel PEGAWAI seperti pada skript berkut :

CREATE TABLE pegewai (NIP char(4),
nama char(30),
job char(25),
primary key (NIP);

ambahkan Rekaman sebagai berkut :

INSERT INTO PEGAWAI VALUES(‘1001′,’Adel Untung’,’Staff’);
INSERT INTO PEGAWAI VALUES(‘1002′,’Temon’,’OB’

);
INSERT INTO PEGAWAI VALUES(‘1003’,’Bejo ‘,’Satpan’);
INSERT INTO PEGAWAI VALUES(‘1004′,’Tukul Paimin’,’Staff’);
INSERT INTO PEGAWAI VALUES(‘1005’,’Tunggul ‘,’Satpam’);Tabel Presensi

CREATE TABLE `absensi` (
`NIP` char(4) DEFAULT NULL COMMENT ‘Nomor Pegwai’,
`JAM_DTG` datetime NOT NULL COMMENT ‘Tanggal jam datang’,
`JAM_PLG` datetime NOT NULL COMMENT ‘Tanggal jam pulang’,
`shitf` int(11) DEFAULT ‘1’ COMMENT ‘kode shift kerja’);

Tambahkan isi rekaman seperti tabel berkut :

insert into absensi(NIP,JAM_DTG,JAM_PLG,shift)
values (‘1001′,’2009-10-17 09:20:22′,’2009-10-17 14:19:03’,1),
(‘1002′,’2009-10-17 09:10:10′,’2009-10-17 10:20:50’,1),
(‘1003′,’2009-10-17 23:19:50′,’2009-10-18 07:19:50’,3),
(‘1005′,’2009-10-17 07:20:28′,’2009-10-17 15:13:26’,1),
(‘1004′,’2009-10-17 07:30:00′,’2009-10-17 14:30:00’,1),
(‘1001′,’2009-10-18 07:30:01′,’2009-10-18 15:22:12’,1),
(‘1001′,’2009-10-19 07:20:11′,’2009-10-19 15:30:33’,1),
(‘1002′,’2009-10-19 07:10:10′,’2009-10-19 14:40:30’,1),
(‘1004′,’2009-10-19 08:00:30′,’2009-10-19 15:00:30’,1),
(‘1003′,’2009-10-19 15:00:30′,’2009-10-19 23:00:30’,2),
(‘1005′,’2009-10-19 23:00:30′,’2009-10-20 07:00:30’,1);

Presensi datang
INSERT INTO absensi VALUES(‘1001’,NOW(),NOW(),

‘1’);Hasilnya :

Ambil jam dan menit saja di query mysql

Presensi PulangUPDATE absensi SET JAM_PLG=NOW()
WHERE NIP=’1001′ AND
SUBSTR(JAM_DTG,1,10)=SUBSTR(NOW(),1,10);

Hasilnya :

Ambil jam dan menit saja di query mysql

Penjelasan :

Hanya mengubah jam pulang saja dengan kunci pencarian seperti perintah berikut :
WHERE NIP=’1001′ AND SUBSTR(JAM_DTG,1,10)=SUBST

R(NOW(),1,10);
Kunci pencarian adalah NIP dan tanggal presensidata yang telah direkam seperti pada tabel berikut :

Ambil jam dan menit saja di query mysql

Menampilkan Presensi semua pegawai tanggal ‘2009-10-17’’SELECT * FROM ABSENSI WHERE SUBSTR(JAM_DTG,1,10)=’2009-10-17’ ;

Ambil jam dan menit saja di query mysql

Penjelasan :SUBSTR(JAM_DTG,1,10)=’2009

-10-17′: adalah untuk membaca tanggalnya saja sebab yang terekam pada field JAM_DTG tanggal dan jam panjang fieldnya 20 digit.Menampilkan presensi semua pegawai tanggal ‘2009-10-17′ dangan menghitung jumlah jam perhari.

SELECT nip,jam_dtg,jam_plg,
TIMEDIFF(jam_plg,jam_dtg) as jam_menit_detik
FROM absensi
WHERE SUBSTR(JAM_DTG,1,10)=’2009-10-17’ ;

Hasil keluaran :

Ambil jam dan menit saja di query mysql

Penjalasan:
Perhitungan TIMEDIFF(jam_plg,jam_dtg):

adalah untuk mengurangi tanggal jam pulang dengan tanggal jam datang hasilnya jam:menit:detikMenampilkan presensi semua pegawai tanggal ‘2009-10-17′ sampai dengan ‘2007-10-19’ untuk pegawai dengan NIP=’1001’ dan menghitung jumlah jam perhari.

SELECT nip,jam_dtg,jam_plg,
TIMEDIFF(jam_plg,jam_dtg) as jam_menit_detik
FROM absensi
WHERE SUBSTR(JAM_DTG,1,10)>=’2009-10-17′ AND SUBSTR(JAM_DTG,1,10)<=’2009-10-19′
AND NIP=’1001’ ;

Hasil keluaran :

Ambil jam dan menit saja di query mysql

Menampilkan presensi jumlah jam kerja semua pegawai periode tanggal ‘2009-10-17′ sampai dengan ‘2007-10-19’SELECT nip, SUM(time_to_Sec(TIMEDIFF(jam_plg,jam_dtg))) as detik,
sec_to_time(SUM(time_to_Sec(TIMEDIFF(jam_plg,jam_dtg)))) as jumlah
FROM absensi
WHERE SUBSTR(JAM_DTG,1,10)>=’2009-10-17′ AND SUBSTR(JAM_DTG,1,10)<=’2009-10-19’
GROUP BY NIP;

Hasil keluaran:

Ambil jam dan menit saja di query mysql

Penjelasan:TIMEDIFF(jam_plg,jam_dtg) fungsi jam pulang dikurangi jam datang
time_to_Sec(TIMEDIFF(jam_plg,jam_dtg)) konversi format waktu ke detik
dijumlahkan pakai SUM( ), kemudian dikembalikan sec_to_time( );

Menampilkan jam kerja beserta nama

Untuk perintah yang menggunakan GROUP BY NIP tidak bisa direlasikan secara langsung, karena perintah SELECT akan mengambil seluruh rekaman yang dipenuhi, dengan ada perintah GROUP BY NIP akan dikelompokan perpegawai, sedang rekaman satu pegawai memiliki sejumlah rekaman. Oleh karna itu perlu dibuat fungsi untuk memabaca nama.