A. Format Tanggal
Seringkali fungsi format tanggal bawaan MySQL hampir tidak pernah disentuh ketika kita dihadapkan pada kebutuhan untuk melakukan format tanggal sesuai dengan yang kita inginkan. Yang biasa kita lakukan adalah dengan meload format tanggal asli MySQL yaitu yyyy-mm-dd, selanjutnya kita olah diprogram yang kita buat untuk melakukan representasi ke dalam format yang sesuai.
Misal jika kita menggunakan PHP, maka hasil fetch query date kita set ke format indonesia dengan perintah date(‘d/m/Y’,$tanggal).
Jika kita lebih mau menggali, sebenarnya fungsi format tanggal bawaan MySQL ini sudah cukup untuk meringankan beban coding di program kita. Let’s take a look !
DATE_FORMAT(tanggal, format)
Parameter tanggal adalah tanggal yang akan diformat. Sementara parameter format adalah format yang kita akan apply ke parameter pertama, dalam bentuk string.
Format diisi dengan specifier yang diawali dengan tanda persen (%). Misal %d untuk format tanggal 2 digit, %M untuk full nama bulan, atau %m (huruf kecil) untuk format bulan dua digit, dsb. Untuk full complete list specifier, Anda bisa refer ke manual MySQL di sini.
Supaya lebih mudah dipahami, kita practice menggunakan query yang akan melakukan format MySQL ke tanggal ke format indonesia. Specifier yang digunakan adalah %d/%m/%Y.
SELECT DATE_FORMAT('2007-01-05','%d/%m/%Y') AS TANGGAL
Paste query diatas ke query editor Anda, dan run. Hasil yang didapat adalah 05/01/2007. Simple bukan ?
Anda bisa mengisi parameter tanggal diatas dari nama field ataupun dari fungsi tanggal berjalan MySQL (lihat point C dibawah).
Sebagai tambahan, ternyata fungsi DATE_FORMAT() ini bisa juga melakukan format time. Anda tinggal menentukan specifiernya saja. Silahkan dig it buat Anda practice
.
B. INTERVAL Tanggal
Salah satu yang menarik yang sering kita temukan kasusnya pada saat akan membuat report / rekap data adalah kita ingin membaca data sekian bulan yang lalu sampai bulan sekarang, atau dari bulan tertentu sampai plus 5 bulan kedepan dsb.
Instead of using fungsi yang ada di program Anda, MySQL pun ternyata membuat kita lebih mudah juga dengan fungsi bawaan yaitu
DATE_SUB(tanggal,INTERVAL) untuk pengurangan dan
DATE_ADD(tanggal,INTERVAL) untuk penambahan ke depan.
Kata kuncinya disini adalah paramater INTERVAL yang merupakan unit dimana Anda akan melakukan penambahan/pengurangan terhadap parameter tanggal. Bisa detik, jam, hari, minggu, bulan bahkan tahun.
SELECT DATE_SUB('2007-01-05',INTERVAL 1 MONTH) AS TGL1,
DATE_SUB('2007-01-05',INTERVAL 2 WEEK) AS TGL2
Field pertama (TGL1) kita kurangi interval 1 bulan dari tanggal 2007-01-05 dan hasilnya adalah 2006-12-05. Sementara yang kedua (TGL2) hanya dikurangi 1 minggu, menjadi 2006-12-22.
Next kita practice untuk penambahannya :
SELECT DATE_ADD('2007-01-05',INTERVAL 1 MONTH) AS TGL1,
DATE_ADD('2007-01-05',INTERVAL 5 DAY) AS TGL2
Berturut-turut setelah dieksekusi, maka interval tanggal akan bertambah menjadi 2007-02-05 dan 2007-01-10.
Sebenarnya, Anda bisa mempersingkat proses sub/add ini hanya dengan menulis operand ‘-’ atau ‘+’ setelah tanggal, silahkan dikembalikan pada Anda mana yang lebih suka.
SELECT '2007-01-05'- INTERVAL 1 MONTH AS TGL1,
'2007-01-05'+ INTERVAL 5 DAY AS TGL2
Khusus untuk penambahan, operand ‘+’ bisa ditulis didepan tanggal.
SELECT INTERVAL 1 MONTH + '2007-01-05' AS TGL1
Very interesting right ? sekarang silahkan Anda coba dengan INTERVAL lainnya. Jangan lupa supaya format tanggal mudah dibaca, silahkan modif query diatas dengan fungsi DATE_FORMAT yang sudah dibahasa pada point A.
C. Current Date
Ada beberapa fungsi MySQL yang dapat kita gunakan untuk membaca current date atau tanggal berjalan system OS. Yang palig sering kita gunakan mungkin menggunakan fungsi now() yang merupakan sinonim untuk CURRENT_TIMESTAMP() atau malah sebagian dari kita paling sering melakukan set value field dari program, bukan dari MySQL langsung.
Kita ambil contoh dari PHP untuk memasukkan data transaksi peminjaman :
INSERT INTO peminjaman SET tglpinjam = '$TGL', kodeanggota = '$KODE' dst…
MySQL sudah menyediakan fungsinya, sayang sekali kalo tidak kita manfaatkan so, kita bisa ganti query diatas menjadi
INSERT INTO peminjaman SET tglpinjam = NOW() .. dst
Disamping fungsi NOW() terdapat fungsi lainnya yang bisa Anda gunakan yaitu CURDATE() atau CURRENT_DATE() dan satu lagi yaitu SYSDATE()
Ada hal yang menarik disini bahwa hasil dari SYSDATE() berbeda dengan fungsi lainnya. Fungsi ini akan mengeluarkan waktu saat fungsi ini dieksekusi, bukan pertama kali statement query dijalankan seperti yang dilakukan fungsi NOW().
Fungsi SYSDATE() ini akan terasa perbedaanya jika kita gunakan pada stored procedure atau trigger. Mengambil contoh dari Manual MySQL coba lihat query berikut :
SELECT NOW(), SLEEP(2), NOW();
+———————+———-+———————+
| NOW() | SLEEP(2) | NOW() |
+———————+———-+———————+
| 2006-04-12 13:47:36 | 0 | 2006-04-12 13:47:36 |
+———————+———-+———————+
SELECT SYSDATE(), SLEEP(2), SYSDATE();
+———————+———-+———————+
| SYSDATE() | SLEEP(2) | SYSDATE() |
+———————+———-+———————+
| 2006-04-12 13:47:44 | 0 | 2006-04-12 13:47:46 |
+———————+———-+———————+
Jika menggunakan NOW() diantara sleep (pause ekseskusi query) selama 2 detik, terlihat fungsi ini mengembalikan waktu yang sama, artinya fungsi ini hanya mengeluarkan waktu dimana query pertama kali dieksekusi.
Berbeda dengan SYSDATE() ternyata jeda 2 detik menghasilkan waktu yang berbeda dari eksekusi SYSDATE() yang pertama.
Semakin menarik bukan bermain dengan MySQL ? Sekarang waktunya bagi Anda untuk berlatih dan menggali lebih dalam lagi
Semoga bermanfaat, GOOD LUCK !
Waah… Thanks banget buar DATE_FORMATnya aku kebantu banget
Mas Eka, That’s good then, if it could help you
ini nich yg aq cari, thankz ya infonya
wew…keren cuy…..setidaknya mengingatkan aku tuk menggunakan fungsi yang ada…..thanks bro..
Thanks bro artikelnya
membantu banget kerjaanku
kalo bisa ditambah lagi bro yang lebih mendetail
he..he..
thanks mas…numpang baca dulu nih..