Jika pada tutorial sebelumnya kita mempelajari Tipe Data Numerik MySQL dan Tipe Data Huruf (String) MySQL, tipe data selanjutnya yang tersedia dalam MySQL adalah tipe data date (tanggal), tipe data ini digunakan untuk menyimpan data yang berkaitan dengan tanggal dan waktu. Tipe data date, terdiri dari: DATE, TIME, DATETIME, TIMESTAMP, dan YEAR.
Dalam tutorial kali ini kita akan membahas secara lebih detail tentang tipe data date (tanggal) di dalam MySQL.
Jenis tipe data DATE dalam MySQL
MySQL memiliki beberapa format untuk tipe data date. Format tipe data date tersebut adalah: DATE, TIME, DATETIME, TIMESTAMP, dan YEAR. Perbedaan dari tipe-tipe tersebut terletak pada format penyimpanan data. Untuk lebih lengkapnya dapat dilihat dari tabel dibawah ini:
Tipe Data | Jangkauan | Ukuran | Zero Value |
---|---|---|---|
DATE | ‘1000-01-01’ to ‘9999-12-31’ | 3 byte | ‘0000-00-00’ |
DATETIME | ‘1000-’01-01 00:00:01’ to ‘9999-12-31 23:59:59’ | 8 byte | ‘0000-00-00 00:00:00’ |
TIMESTAMP | ‘1970-01-01 00:00:00’ to ‘2038-01-18 22:14:07’ | 4 byte | ‘0000-00-00 00:00:00’ |
TIME | ‘–838:59:59’ to ‘838:59:58’ | 3 byte | ‘00:00:00’ |
YEAR(2) | 00 to 99 | 1 byte | ‘00’ |
YEAR(4) | 1901 to 2155 | 1 byte | ‘0000’ |
MySQL menyediakan beberapa format yang dapat digunakan untuk input tipe data tanggal, masing masing untuk tipe data yang bersesuaian.
Tipe Data | Fomat Input |
---|---|
DATETIME | 'CCYY-MM-DD hh:mm:ss' |
TIMESTAMP | 'YY-MM-DD hh:mm:ss' |
'CCYYMMDDhhmmss' | |
'YYMMDDhhmmss' | |
CCYYMMDDhhmmss | |
YYMMDDhhmmss | |
DATE | 'CCYY-MM-DD' |
'YY-MM-DD' | |
'CCYYMMDD' | |
'YYMMDD' | |
CCYYMMDD | |
YYMMDD | |
TIME | 'hh:mm:ss' |
'hhmmss' | |
hhmmss | |
YEAR | 'CCYY' |
'YY' | |
CCYY | |
YY |
- CCYY : input untuk tahun, dimana YY berupa tahun 2 digit, seperti 98, 78, dan 00, sedangkan untuk CCYY adalah tahun dengan 4 digit, seperti 2001, 1987, 2012. Untuk tahun dengan 2 digit, MySQL mengkonversinya dengan aturan 70-99 menjadi 1970-1999 dan 00-69 menjadi 2000-2069.
- MM: bulan dalam format dua digit, seperti 05,07,dan 12.
- DD: tanggal dalam format dua digit, seperti 14, 06 dan 30.
- hh: jam dalam format 2 digit, seperti 06,09, dan 12.
- mm: menit, dalam format 2 digit, seperti 15, 45, dan 59.
- ss: detik, dalam format 2 digit, seperti 10, 40, dan 57.
Jika MySQL tidak dapat membaca format, atau data tidak tersedia, maka data akan diisi sesuai dengan nilai pada Zero Value.
Contoh query untuk membuat tabel dengan data DATE:
mysql> CREATE TABLE contoh_date (dat DATE, tim TIME, dattim DATETIME, timestam TIMESTAMP, yea YEAR); Query OK, 0 rows affected (0.06 sec) mysql> DESCRIBE contoh_date; +----------+-----------+------+-----+-------------------+-----------------------------+ | Field   | Type     | Null | Key | Default          | Extra | +----------+-----------+------+-----+-------------------+-----------------------------+ | dat     | date     | YES |    | NULL             | | | tim     | time     | YES |    | NULL             | | | dattim  | datetime | YES |    | NULL             | | | timestam | timestamp | NO  |    | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | | yea     | year(4)  | YES |    | NULL             | | +----------+-----------+------+-----+-------------------+-----------------------------+ 5 rows in set (0.01 sec)
Perhatikan pada saat mendefinisikan tipe data YEAR, pada query DESCRIBE kita dapat melihat bahwa MySQL memberikan nilai YEAR(4) sebagai nilai default. Kita dapat secara langsung mendefinisikan YEAR(2) jika menginginkan data tahun dengan 2 digit, namun hal ini tidak disarankan, karena dengan mendefinisikan tahun 26, akan menjadi ambigu, apakah itu tahun 1926 atau 2026, walaupun MySQL memiliki aturan akan mengkonversinya menjadi 2026.
MySQL menyediakan fungsi NOW() untuk memberikan tanggal server pada saat ini, dan kita akan menggunakannya sebagai nilai tiap kolom pada tabel contoh_date:
mysql> INSERT INTO contoh_date values (NOW(),NOW(),NOW(),NOW(),'2012'); Query OK, 1 row affected, 1 warning (0.05 sec) mysql> SELECT * FROM contoh_date; +------------+----------+---------------------+---------------------+------+ | dat       | tim     | dattim             | timestam           | yea | +------------+----------+---------------------+---------------------+------+ | 2012-10-20 | 19:40:45 | 2012-10-20 19:40:45 | 2012-10-20 19:40:45 | 2012 | +------------+----------+---------------------+---------------------+------+ 1 row in set (0.00 sec)
Khusus untuk tipe data YEAR, fungsi NOW() akan menghasilkan error, oleh karenanya, pada contoh diatas saya menginput manual ‘2012’ untuk kolom YEAR.
Tipe data date dalam MySQL bukanlah tipe data dasar, akan tetapi penggunaannya sangat umum dan sering sehingga MySQL menyediakan tipe data tanggal secara bawaan. Dalam tutorial belajar MySQL selanjutnya, kita akan membahas tentang tipe data bentukan MySQL: enum dan set, serta perbedaan keduanya.
makasih mas..
Alhamdulillah makasih banyak ya mas untuk ilmunya.. Jazakumullah khair jaza
Maturnuwun sanget atas bimbinganya kangmas.
Makasih ilmunya gan. Kembangkan terus ya websitenya. :)
Kalo format untuk penampilannya gimana gan? terutama untuk format tanggal Indonesia?
htr nuhun
Sip bro bisa di cobak
Syukron
Thank ubtas ilmu nya
gan, ada cara untuk menghitung (aritmatika) tipe data date ini gak?
Kalau sudah masuk ke logika (misalnya menghitung penjumlahan, selisih tanggal, dll) saya lebih menyarankan buat di PHPnya gan, bukan di MySQL. PHP memiliki banyak fungsi (function) terkait pemrosesan tanggal.
permisi gan, numpang tanya, klo misalnya cara mencari selisih tanggal nya berdasarkan record sebelumnya gimana gan?
misal :
id tanggal
1 2012-05-02
2 2012-05-05
3 2012-05-12
nah itu dapet selisihnya dari tgl 02 ke 05 = 3 trus dari tgl 05 ke 12 = 7 dst,
makasih gan
Untuk menghitung selisih tanggal bisa menggunakan fungsi DATEDIFF() gan, contohnya: SELECT DATEDIFF('2014-11-30','2014-11-29');
Kalo misalnya menghitung selisih waktu dalam format datetime misal 2016-12-01 00:00:01 dan 2016-12-31 00:00:10 gimana ya?
mas,,, program saya type data nya, DATE,, TANGGAL_LAHIR, tpi ketika di jalankan gk bisaa, DATE,nya saya blok balik sesuai tutorial yang lain, tapi gak bisaaa, invalid indentifier
Errornya "invalid identifier" y gan? Kayaknya error tersebut berasal dari PHP, bukan MySQLnya…
cara ubah jadi format dd/mm/ccyy gmn ya mas ? tq
Bawaan MySQL untuk tipe data date memang harus disimpan seperti itu sis (g bisa kita ubah). Tp pada saat ditampilkan biasanya pakai bahasa pemrograman seperti PHP. Di PHP-lah date ini diproses. Misalnya bisa menggunakan fungsi substr() untuk memotong bagian tahun, bulan dan tanggal.
mas, gimana ya logikanya misalkan saya mau bikin sistem pemesanan tiket film di bioskop, biasanyakan filmnya ada jadwal jamnya , jadwal 1 jam sekian, jadwal 2 jam sekian dst. nah setiap studiokan ada batas jumlah kursinya, saya bingungnya cara membatasi pembelian tiket berdasarkan jadwal jam tersebut gimana ya ?
Dibuat saja 1 tabel yang berisi: nama_film, jam_tayang, dan jumlah_kursi. Nanti waktu ada yang mau beli tikel, cek seluruh data ini, jika jumlah_kursi untuk jam yang sama sudah penuh, berarti tidak bisa lagi. Atau jika jamnya sudah lewat (bisa dibandingkan dengan jam di sistem), juga tidak bisa di order.
oya, min untuk di YEAR bisa kok pakek NOW, saya coba tidak error.
INSERT INTO contoh_date values (NOW() , NOW(), NOW(),NOW(), NOW());
Query OK, 1 row affected, 1 warning (0.07 sec)
mysql> SELECT * FROM contoh_date;
+————+———-+———————+———————+——+
| dat | tim | dattim | timestam | yea |
+————+———-+———————+———————+——+
| 2017-02-23 | 21:43:44 | 2017-02-23 21:43:44 | 2017-02-23 21:43:44 | 2012 |
| 2017-02-23 | 21:44:23 | 2017-02-23 21:44:23 | 2017-02-23 21:44:23 | 2016 |
| 2017-02-23 | 21:45:00 | 2017-02-23 21:45:00 | 2017-02-23 21:45:00 | 2017 |
+————+———-+———————+———————+——+
3 rows in set (0.00 sec)
Terimakasih updatenya gan… mungkin versi MySQL yang saya pakai saat tutorial ini dibuat belum support atau ada bug, hehe…
Kenapa pas saya inputkan data lagi kok, jam sama tanggalnya kok jadi angka 0 semua ya?
kalo saya mau membuat table dengan 5 kolom ; no, nama, hari, tanggal dan jam. berarti saya harus menambahkan table lg ya gan untuk pewaktuannya? khususnya untuk hari dan jam
Tergantung gimana design tabel yang ingin dibuat, dipisah bisa, digabung juga g masalah.
Untuk hari dan jam bisa dipisah kedalam 2 kolom atau menggunakan tipe data DATETIME untuk 1 kolom.
gan, gmn caranya menentukan jumlah selisih waktu agar bisa di tampilkan pada form tabelnya.
Bisa menggunakan berbagai fungsi bawaan MySQL terkait time, seperti DATEDIFF:
SELECT DATEDIFF('2010-10-08 18:23:13', '2010-09-21 21:40:36') AS days;
Atau bisa juga menggunakan fungsi2 waktu bawaan PHP.
Gan gimana cara untuk menampilkan field tanggal yang paling baru.
Jadi saya disini buat bebrapa field tanggal yang berbeda. Jadi saya mau menampilkan tanggal yang paling baru.
Itu gmna ya? Apa pakai YEAR() . Saya coba, Itu keluar semua tahun. Konsepnya saya ngerti, dilihat dari tahun yang paling baru. Tapi menampilkannya saya yang tidak mengerti.
Mohon bantuannya
Tanggalnya bisa di urutkan dulu menggunakan perintah ORDER BY DESC. Nanti tanggal paling baru akan tampil di baris paling atas.
Contoh:
SELECT id, tanggal FROM tabel_harga ORDER BY tanggal DESC;
Terima kasih banyak, saya ikut belajar dari postingan Duniailkom. Jazaakumulloohu kroirul jazaa
Aamiin, sama2.. saya juga senang tutorialnya bisa bermanfaat.
gan, misal saya punya 5 kolom, tapi yang saya ingin isi hanya kolom 1 sampai 4 saja sdgkan 5 dikosongkan. rumus yg dimasukkan seperti apa ya? kok saya coba ' ' tidak bisa ya?
terimkasih ini sangat membantu saya,saya kasi bintang 2 dulu yaa :)
Hehe… siip, semoga bermanfaat.
tq tq
min kalau mau menampilkan data misal ada field tgl_cetak yang kurang dari 3 tahun…perintahnya gmn ya? jd nanti akan menampilkan data yg dicetak 3 tahun sejak tgl sekarang sd. sekarang saja…
Kalo tipe time nya kaya 04:13 AM itu gimana ya?
kalau ada 4 field seperti ada
kode
nama
tanggalbeli Default tanggal hari ini
Umur Calculated field dengan rumus: Tanggal hari ini-tanggal lahir
itu buatnya gimana ya?