Skip to content

Playing Around With Date in MySQL

3 September 2007

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 !

7 Comments leave one →
  1. 18 September 2007 2:29 pm

    Waah… Thanks banget buar DATE_FORMATnya aku kebantu banget 🙂

  2. cevarief permalink
    19 September 2007 8:16 am

    Mas Eka, That’s good then, if it could help you😀

  3. 9 January 2009 10:04 am

    ini nich yg aq cari, thankz ya infonya

  4. 23 April 2009 11:35 pm

    wew…keren cuy…..setidaknya mengingatkan aku tuk menggunakan fungsi yang ada…..thanks bro..

  5. arip_citizen permalink
    30 September 2009 12:02 pm

    Thanks bro artikelnya
    membantu banget kerjaanku
    kalo bisa ditambah lagi bro yang lebih mendetail
    he..he..

  6. 3 November 2009 3:55 pm

    thanks mas…numpang baca dulu nih..😛

  7. 14 January 2010 9:08 am

    thax mas infonya

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: