MySQL-date-and-time-function-achmatim

Perintah MySQL berhubungan dengan Tanggal dan Waktu

Penanganan tanggal dan waktu merupakan hal yang cukup penting dalam suatu software basis data, termasuk MySQL. Bahkan MySQL memiliki lebih dari 50 fungsi khusus berhubungan dengan tanggal dan waktu. Selengkapnya dapat dilihat di dokumentasi resmi MySQL. Di tutorial ini, saya tidak akan membahas satu per satu fungsi tersebut, sebagian besar fungsi sudah saya jelaskan di buku gratis mysqlMySQL 5: Dari Pemula Hingga Mahir” yang saya publikasikan secara gratis beberapa waktu lalu. Namun dalam tutorial ini saya akan coba menyajikan beberapa contoh perintah MySQL berhubungan dengan tanggal dan waktu yang selama ini sering saya gunakan.

Semoga daftar berikut ini bermanfaat untuk kita semua.

(1) Fungsi untuk menampilkan tanggal dan waktu saat ini

Untuk menampilkan tanggal dan waktu saat ini (server), saya sering menggunakan fungsi NOW(). Selain itu, dapat juga menggunakan CURDATE() yang akan menghasilkan tanggal saat ini dan CURTIME() yang akan menghasilkan waktu saat ini (tanpa tanggal). Berikut ini contoh dan hasil tampilannya:

mysql> SELECT NOW(), CURDATE(), CURTIME();
+---------------------+------------+-----------+
| NOW()               | CURDATE()  | CURTIME() |
+---------------------+------------+-----------+
| 2010-09-20 22:01:22 | 2010-09-20 | 22:01:22  |
+---------------------+------------+-----------+
1 row in set (0.00 sec)

(2) Fungsi untuk Mengatur (Format) Tampilan Tanggal dan Waktu

Seperti kita ketahui bersama, format default tanggal di MySQL adalah YYYY-MM-DD. Format tersebut harus diikuti, terutama saat menyimpan nilai kedalam field yang bertipe DATE. Nah, seringkali dalam menyajikan data ke user, kita memerlukan format tanggal yang berbeda dari format tanggal default tersebut. Misalnya kita ingin menampilkan tanggal dalam format DD/MM/YYYY atau format panjang seperti ‘September 20th, 2010’. Lalu, bagaimana caranya? Saya sering menggunakan fungsi DATE_FORMAT() untuk mengatur tampilan tanggal dan waktu. Dengan fungsi ini kita dapat menampilkan tanggal dalam berbagai format. Format selengkapnya dapat dilihat di sini.

Berikut ini contohnya:

mysql> SELECT DATE_FORMAT(NOW(), '%d/%m/%Y') as tanggal1, DATE_FORMAT(NOW(), '%M %D, %Y') as tanggal2;
+------------+----------------------+
| tanggal1   | tanggal2             |
+------------+----------------------+
| 20/09/2010 | September 20th, 2010 |
+------------+----------------------+
1 row in set (0.00 sec)

(3) Fungsi untuk Memecah Tanggal dan Waktu

Dari suatu field tanggal dan waktu yang tersimpan secara lengkap, seringkali kita hanya ingin mengambil bagian tertentu saja. Misalnya hanya ingin mengambil tahun atau tanggalnya saja. Selain menggunakan fungsi DATE_FORMAT(), kita dapat memecah tanggal dengan menggunakan fungsi seperti YEAR() untuk mengambil tahun, MONTH() untuk mengambil bulan, DAY() untuk mengambil hari, HOUR() untuk mengambil jam, MINUTE() untuk mengambil menit dan SECOND() untuk mengambil detik.

Berikut ini contoh perintahnya:

mysql> SELECT YEAR(NOW()), MONTH(NOW()), DAY(NOW()), HOUR(NOW()), MINUTE(NOW()), SECOND(NOW());
+-------------+--------------+------------+-------------+---------------+---------------+
| YEAR(NOW()) | MONTH(NOW()) | DAY(NOW()) | HOUR(NOW()) | MINUTE(NOW()) | SECOND(NOW()) |
+-------------+--------------+------------+-------------+---------------+---------------+
|        2010 |            9 |         20 |          22 |            21 |            11 |
+-------------+--------------+------------+-------------+---------------+---------------+
1 row in set (0.00 sec)

(4) Fungsi untuk Penambahan dan Pengurangan Tanggal dan Waktu

Penambahan dan Pengurangan tanggal dan waktu merupakan operasi yang sering dilakukan terhadap tanggal. Contohnya jika kita ingin mengetahui tanggal berapakah 1 minggu ke depan, atau tanggal berapakah 10 hari yang lalu. Operasi tersebut dapat menggunakan fungsi DATE_ADD() dan DATE_SUB().

Berikut ini contoh sederhananya:

mysql> SELECT CURDATE() as sekarang, DATE_ADD(CURDATE(), INTERVAL 1 WEEK) as '+ 1 minggu',
 -> DATE_SUB(CURDATE(), INTERVAL 10 DAY) as '- 10 hari';
+------------+------------+------------+
| sekarang   | + 1 minggu | - 10 hari  |
+------------+------------+------------+
| 2010-09-20 | 2010-09-27 | 2010-09-10 |
+------------+------------+------------+
1 row in set (0.00 sec)

(5) Fungsi untuk Mencari Perbedaan diantara Dua Tanggal atau Waktu

Sebelumnya, kita sudah mengenal fungsi untuk menambah dan mengurangi tanggal atau waktu dengan interval tertentu. Lalu bagaimana caranya untuk mencari perbedaan di antara dua tanggal atau waktu? Contoh sederhananya misalnya untuk mencari umur seseorang berdasarkan tanggal lahirnya. Solusinya sebenarnya cukup beragam, dapat menggunakan fungsi PERIOD_DIFF() yang akan menghasilkan selisih bulan dari dua tanggal (tanggal sekarang dan tanggal lahir), lalu tinggal dibagi dengan 12 untuk mendapatkan umur dalam tahun. Selain itu, kita juga dapat mencari tahun dari masing-masing tanggal sekarang dan tanggal lahir lalu dikurangkan. Lihat contoh perintahnya sebagai berikut:

mysql> SELECT ((year(curdate())-year('1982-06-05')) - (right(curdate(),5) < right('1982-06-05',5))) as umur;
+------+
| umur |
+------+
|   28 |
+------+
1 row in set (0.00 sec)

Demikian 5 Variasi Perintah MySQL berhubungan dengan Tanggal dan Waktu yang sering saya gunakan. Semoga bermanfaat untuk kita semua. Amin

Maju Terus Ilmu Pengetahuan Indonesia!

Berbagi itu indah...Share on Facebook0Share on Google+0Tweet about this on TwitterShare on LinkedIn0Pin on Pinterest0Digg this

47 comments

  1. Bang saya mau nanya ya…
    Saya punya data tabel absensi siswa, field dianaranya sbb. tgl_absn, absensi,ket.
    Untuk repot tampilan tanggal hari ini sudah bisa, tapi saya ingin menampilkan berdasarkan bulan sekarang atau kemarin atau bulan tertentu, demikian juga ingin menampilkan tanggal absen tertentu. saya sudah coba buat form-nya tapi ngak bisa dikenali kirimannya dari form tersebut. sisi penerima pada input tanggal begini:
    …. WHERE tgl_absen like %cari% AND level=’siswa’
    Tolong beri contoh untuk di bagian form-nya.
    Terima kasih.

  2. Assalamu’alaikum Pak saya mau tanya tentang vb.net saya mau mencari nama pd aplikasi vb.net, nah ketika ingin mencarinya it berhasil tapi ketika ditambah tanda kutip jadi error contoh :   Ma’rif ketika di cari jadi error
     

    1. Gunakan stored procedure kemudian kirim data ke parameter yang ada di stored procedure, operasi Insert Into…… dibuat distored prosedur. tidak menggunakan tanda kutip2 (‘). semua data bisa disimpan walaupun ada tanda kutipnya.

  3. Terimakasih tak terhingga dari saya buat Mas Achmatim.
    Website Anda sangat membantu saya dalam belajar php dan mysql. Saya berharap akan ada bahasan mengenai server.

  4. maz q yudi, q da tgs untuk buat jurnal harian. trs mslh q tu da di tabel master akun!!
    kan di master akun tercancum no rekening trs no rekeningnya tu bersifat menual jd input sendiri gitu loh, ah yg diminta tu otomatis???
    trs cara butanya gmn mas,
    kl no rekeningnya 01.01.02?
    kan harus gabungkan no parent dan no childnya to?
    tu gmn mas sourcenya?
    terima kasih banyak
    q harap mas bs bntu saya?

  5. bapak Ihat lgi bkin report  di Ireport dengan Database MYSQL yang harus menampilkan data untuk bulan tertentu sesuai yg diinginkan… dah di coba2 tp te2p eror gk mau tampil….

  6. bagaimana cara menampilkan data ketika kita input tanggal tertentu yang muncul data yang ada pada tanggal itu dan tanggal kemarinnya?

  7. pa mau tanya bagai mana menampilkan laporan per priode pada dreamweaver tolong dong pa udaah nayari – nayari kaga ketemu udah ampe pusing tolong ya pa

  8. Saya mau tanya, jika ingin meng-insert data (misal) ID yg berupa primary key dan autoincreament namun isinya sesuai tanggal data saat di-insert (misal insert tgl 20 Sept. 2013, IDnya jd 201309201) itu gmn ya?

  9. Selamat sore Pak, saya mau nanya bagaimana caranya menampilkan data transaksi yang sekarang sedangkan data transaksi kemarin tidak mucul di tabel website, mohon pencerahannya Pak karena saat ini saya lagi mencarinya.
    Terima kasih.

  10. Pak mau tanya,study kasus”Saya punya tabel biaya,field nya id(auto_increment),tanggal(date),harga(varchar).bagaimana query untuk menjumlahkan harga berdasarkan bulan dan tahun ya pak?misalkan kita pilih dari combobox bulan 9 tahun 2012,maka query nya menjumlahkan harga dari 1 sampai bulan 8,jika milih combobox bulan 1 tapi tahun nya 2013 maka jumlahkan harga dari bulan 1 sampai bulan 12 tahun 2012″,bagaimana query sql nya jika spt itu pak?sebelumnya terima kasih

    1. Kurang lebih bisa dilakukan dengan query:
      SELECT SUM(harga) as jumlah FROM biaya WHERE tanggal BETWEEN ‘yyyy-mm-dd’ AND ‘yyyy-mm-dd’

      tanggal awal dan akhir bisa diatur di PHP.

  11. misal gini pak=
    hasil dari pilihan combobox
    $bulan=$_POST[bulan];—>misalnya bulan 1
    $tahun=$_POST[tahun];—>misalnya tahun 2013
    data di field tanggal memeang ‘yyyy-mm-dd’,tapi saya ingin mengetahui jumlah berdasarkan bulan dan tahun saja,(isi database hanya bulan maret,november dan desember 2012 saja).
    saya sudah coba gini pak
    (select sum(harga) as total from biaya where month(tanggal)<='$bulan')tapi kalau pilih bulan januari tapi tahun 2013 hasilnya kok 0 ya?harusnya hasilnya tetep penjumlahan dari januari sampai desember 2012.

  12. Mau Nanya Kang,
    Kalo untuk menampilkan Bulan dan tahun saja gimana yach cara select nya?
    misalkan OrderDate = 2014-02-25 jadi February,2014

    Di Mysql Bisa nggak yach??

    Thanks

  13. Mas bisa bantu kita ndak, bagaimana membuat laporan tunggakan/ piutang bulanan. Contoh untuk januari 2014 sampai mei , ada pelanggan yang belum bayar. kalo kita kan yang terimput data yang sudah bayar, berarti kita hanya menyeleksi data yang belum bayar aja ya. tapi untuk penggunaan periode apakah pakai perhitungan waktu juga.

  14. Pingback: Gregory Smith
  15. mas ahmad tolong dong.. kalo saya mau select barang dengan kondisi/syarat kodetransaksi tertentu dan datetime terbaru dari record yang ada di database gimana caranya mas??
    misalnya saya punya tabel transaksi seperti dibawah ini

    kodetxr varchar(6)
    waktu datetime
    barang varchar(30)

    mohon bantuannya ya mas

  16. pak tolong bantuannya pak
    saya punya kasus menampilkan data expired yang tinggal 6 bulan lagi berdasarkan tanggal penerimaan,
    gimna caranya pak..?
    tolong bantuanya

  17. Assalamualaikum wr.wbt.

    Mas, saya punya format datetime 2016-06-05 03:54:10
    bagaimana fungsi searchnya ?
    masih bingung, klo pake fungsi biasa hasilnya tidak semua yang muncul,
    misal dicari tanggal 1 – 4, yang keluar hanya tanggal 1 -3 saja,
    klo satu tanggal malah hasilnya kosong..
    Thanks..

  18. pak saya mau tanya, kenapa ya datetime di mysql saya berbeda dengan waktu sebenarnya. Untuk tgl bln thn akurat, tapi untuk waktu jam menit detik nya tidak akurat

Leave a Reply

Your email address will not be published. Required fields are marked *