Kupas tuntas Tipe data Date pada MySQL

Setelah membahas tipe data string dan integer kali ini penulis akan membahas mengenai tipe data date (tanggal) pada mysql. Tipe data date digunakan untuk menyimpan data dengan format tanggal dan waktu dimana pada tipe data date sendiri ada beberapa tipe, seperti pada tabel berikut:

Tipe Data Keterangan Jangkauan Ukuran
Date Menympan data tanggal dengan format YYYY-MM-DD 1000-01-01 s/d 9999-12-31 3 byte
Time Menyimpan data waktu dengan format HH:MM:SS -838:59:59 s/d +838:59:59 3 byte
Year Menyimpan data tahun 1900 s/d 2155 1 byte
Datetime Menyimpan data tanggal dan waktu ‘1000-01-01 00:00:00’ s/d ‘9999-12-31 23:59:59’ 8 byte
Timestamp Menyimpan data tanggal dan waktu ‘1970-01-01 00:00:00’ s/d ‘2038-01-18 22:14:07’ 4 byte

Bentuk umum / format date untuk mendefinisikan kolom dengan tipe data date, time, year, dan datetime adalah sebagai berikut:

create table nama_tabel (kolom_1 date, kolom_2 year, kolom_3 time, kolom_N datetime)
0 row(s) affected	0.250 sec

Sementara bentuk umum / format untuk menyimpan data tanggal dan waktu terkini pada kolom dengan tipe data date, time, year dan datetime adalah sebagai berikut:

insert into tanggal values (NOW(), NOW(), NOW(), NOW())
1 row(s) affected, 1 warning(s): 1292 Incorrect date value: '2021-04-23 23:32:56' for column 'kolom_1' at row 1	0.016 sec
insert into tanggal values (curdate(), current_date(), curtime(), current_timestamp())
1 row(s) affected	0.000 sec
insert into tanggal values (curdate(), NOW(), curdate(), curdate())
1 row(s) affected	0.125 sec

Pada contoh diatas penggunaan now() adalah untuk menyimpan data tanggal dan waktu berdasarkan waktu saat ini, selain now kita juga bisa menggunakan perintah curdate dan curtime. Lalu apa bedanya penggunaan now() dan curdate()? Untuk menjawab hal tersebut dapat melihat hasilnya sebagai berikut:

select * from tanggal
+------------+---------+----------+---------------------+
| kolom_1    | kolom_2 | kolom_3  | kolom_4             |
+------------+---------+----------+---------------------+
| 2021-04-24 |    2021 | 08:06:06 | 2021-04-24 08:06:06 |
| 2021-04-24 |    2021 | 08:06:09 | 2021-04-24 08:06:09 |
| 2021-04-24 |    2021 | 00:00:00 | 2021-04-24 00:00:00 |
+------------+---------+----------+---------------------+
3 rows in set 	0.000 sec

Perbedaan antara fungsi now() dan curdate() yaitu terletak pada waktu, dimana fungsi now() dapat menyimpan tanggal dan waktu, sementara curdate() hanya menyimpan data tanggal saja, untuk itu kita bisa menggunakan curtime jika hanya ingin menyimpan data waktu saja. Pada penggunaan now(), curdate() dan curtime() perlu di akhiri dengan tanda kurung buka-tutup. Selain itu mysql juga menyediakan perintah sinonim / persamaan fungsi dengan now, curdate dan curtime, yakni:
  • curdate()
    • current_date dan current_date() merupakan sinonim dari curdate()
  • curtime()
    • current_time dan current_time() merupakan sinonim dari curtime()
  • current_timestamp dan current_timestamp() merupakan sinonim dari now()

STR_TO_DATE()
Selain menggunakan fungsi now() dan current, kita juga dapat menyimpan data tanggal dan waktu di mysql berdasarkan tanggal / waktu tertentu seperti berikut ini:

insert into tanggal values ("1995-05-05", "1995", "13:19:20", "1995-12-25 13:19:20")
1 row(s) affected	0.000 sec
insert into tanggal values (str_to_date("25-05-1995", "%d-%m-%Y"), "1995", "13:19:20", "1995-12-25 13:19:20")
1 row(s) affected	0.016 sec
select * from tanggal;
+------------+---------+----------+---------------------+
| kolom_1    | kolom_2 | kolom_3  | kolom_4             |
+------------+---------+----------+---------------------+
| 2021-04-24 |    2021 | 08:06:06 | 2021-04-24 08:06:06 |
| 2021-04-24 |    2021 | 08:06:09 | 2021-04-24 08:06:09 |
| 2021-04-24 |    2021 | 00:00:00 | 2021-04-24 00:00:00 |
| 1995-05-05 |    1995 | 13:19:20 | 1995-12-25 13:19:20 |
| 1995-05-25 |    1995 | 13:19:20 | 1995-12-25 13:19:20 |
+------------+---------+----------+---------------------+
5 rows in set (0.00 sec)

DATE_FORMAT()
Pada contoh diatas kita dapat menggunakan fungsi str_to_date yakni berfungsi untuk merubah format tanggal yang di input sesuai dengan yang diinginkan namun data yang tersimpan masih tetap dengan format default. Lalu bagaimana jika ingin menampilkan data tanggal pada mysql dengan format tertentu seperti dengan format d-m-Y atau hari-bulan-tahun? Berikut ini format dan contohnya:
Format:

select date_format(nama_kolom, ekspresi) from nama_tabel;

Contoh:

mysql> select date_format (kolom_1, "%d %M, %Y") as K1, kolom_2, kolom_3, date_format (kolom_4, "%d %M, %Y %H:%i:%s WIB") as K4 from tanggal;
+----------------+---------+----------+--------------------------------+
| K1             | kolom_2 | kolom_3  | K4                             |
+----------------+---------+----------+--------------------------------+
| 24 April, 2021 |    2021 | 08:06:06 | 24 April, 2021 08:06:06 WIB    |
| 24 April, 2021 |    2021 | 08:06:09 | 24 April, 2021 08:06:09 WIB    |
| 24 April, 2021 |    2021 | 00:00:00 | 24 April, 2021 00:00:00 WIB    |
| 05 May, 1995   |    1995 | 13:19:20 | 25 December, 1995 13:19:20 WIB |
| 25 May, 1995   |    1995 | 13:19:20 | 25 December, 1995 13:19:20 WIB |
+----------------+---------+----------+--------------------------------+
5 rows in set (0.00 sec)
select date_format (kolom_1, "%W, %d %M, %Y") as K1, kolom_2, kolom_3, date_format (kolom_4, "%d %M, %Y %H:%i:%s WIB") as K4 from tanggal;
+--------------------------+---------+----------+--------------------------------+
| K1                       | kolom_2 | kolom_3  | K4                             |
+--------------------------+---------+----------+--------------------------------+
| Saturday, 24 April, 2021 |    2021 | 08:06:06 | 24 April, 2021 08:06:06 WIB    |
| Saturday, 24 April, 2021 |    2021 | 08:06:09 | 24 April, 2021 08:06:09 WIB    |
| Saturday, 24 April, 2021 |    2021 | 00:00:00 | 24 April, 2021 00:00:00 WIB    |
| Friday, 05 May, 1995     |    1995 | 13:19:20 | 25 December, 1995 13:19:20 WIB |
| Thursday, 25 May, 1995   |    1995 | 13:19:20 | 25 December, 1995 13:19:20 WIB |
+--------------------------+---------+----------+--------------------------------+
5 rows in set (0.00 sec)

Dari contoh diatas kita tidak dapat menggunakan perintah select * from sehingga harus memilih data pada kolom mana yang ingin diubah formatnya, selain itu kita juga dapat menampilkan data berdasarkan tanggal tertentu dengan mengganti kolom_1 dengan tertentu menggunakan format tanggal default yaitu tahun-bulan-tanggal seperti "1995-12-23" serta merubah format tanggal yang diinginkan dengan mengganti ekspresi yang di apit oleh tanda petik dua semisal menjadi "%d-%m-%Y". Dari contoh diatas juga masih menggunakan format inggris, lalu bagaimana jika ingin merubah dan membuat format tanggal default mysql menjadi format tanggal indonesia? Berikut ini caranya:

set lc_time_names = "id_ID";
Query OK, 0 rows affected (0.04 sec)
select date_format (kolom_1, "%W, %d %M, %Y") as K1, kolom_2, kolom_3, date_format (kolom_4, "%d %M, %Y %H:%i:%s WIB") as K4 from tanggal;
+-----------------------+---------+----------+--------------------------------+
| K1                    | kolom_2 | kolom_3  | K4                             |
+-----------------------+---------+----------+--------------------------------+
| Sabtu, 24 April, 2021 |    2021 | 08:06:06 | 24 April, 2021 08:06:06 WIB    |
| Sabtu, 24 April, 2021 |    2021 | 08:06:09 | 24 April, 2021 08:06:09 WIB    |
| Sabtu, 24 April, 2021 |    2021 | 00:00:00 | 24 April, 2021 00:00:00 WIB    |
| Jumat, 05 Mei, 1995   |    1995 | 13:19:20 | 25 Desember, 1995 13:19:20 WIB |
| Kamis, 25 Mei, 1995   |    1995 | 13:19:20 | 25 Desember, 1995 13:19:20 WIB |
+-----------------------+---------+----------+--------------------------------+
5 rows in set (0.00 sec)

Dari contoh diatas untuk menampilkan data dengan format tanggal dan waktu indonesia adalah dengan mengeksekusi query set lc_time_names = "id_ID"; terlebih dahulu yang berfungsi untuk merubah zona waktu lokal server dengan begitu kita dapat menampilkan data dengan format waktu indonesia namun akan kembali ke pengaturan default menggunakan format inggris setiap kali menutup terminal / command line, sementara perintah yang digunakan untuk memeriksa zona waktu yang digunakan server adalah select @@lc_time_names;. Berikut ini adalah sejumlah parameter ekspresi yang dapat digunakan untuk menampilkan data tanggal dan waktu pada mysql:
Parameter Deskripsi
%a Penyingkatan nama hari (Sun..Sat)
%b Penyingkatan nama bulan (Jan..Dec)
%c Bulan, dalam angka (0..12)
%D Hari dalam sebulan dengan format akhiran inggris (0th, 1st, 2nd, 3rd, …)
%d Hari dalam sebulan, format desimal (00..31)
%e Hari dalam sebulan, format bilangan bulat (0..31)
%f Microseconds (000000..999999)
%H Jam (00..23)
%h Jam (01..12)
%I Jam (01..12)
%i Menit, format angka (00..59)
%j Hari dalam satu tahun (001..366)
%k Jam (0..23)
%l Jam (1..12)
%M Nama bulan (January..December)
%m Bulan, dalam format angka (00..12)
%p Waktu dalam format AM atau  PM
%r Waktu, format 12 jam (hh:mm:ss diikuti dengan AM atau PM)
%S Detik (00..59)
%s Detik (00..59)
%T Waktu, format 24 jam (hh:mm:ss)
%U Minggu (00..53), dimana minggu adalah hari pertama dalam sepekan; WEEK() mode 0
%u Minggu (00..53), dimana senin adalah hari pertama dalam sepekan; WEEK() mode 1
%V Minggu (01..53), dimana minggu adalah hari pertama dalam sepekan; WEEK() mode 2; used with %X
%v Minggu (01..53), dimana senin adalah hari pertama dalam sepekan; WEEK() mode 3; used with %x
%W Nama hari kerja (Sunday..Saturday)
%w Hari kerja dalam format angka (0=Sunday..6=Saturday)
%X Year for the week where Sunday is the first day of the week, numeric, four digits; used with %V
%x Year for the week, where Monday is the first day of the week, numeric, four digits; used with %v
%Y Tahun dalam 4 digit
%y Tahun dalam 2 digit
%% A literal % character
%x x, for any x not listed above

TIMESTAMP() dan CURRENT_TIMESTAMP
Tipe data date pada mysql juga menyediakan tipe data timestamp dengan atribut current_timestamp untuk menginput maupun memperbaharui data tanggal dan waktu secara otomatis dimana biasanya digunakan sebagai penanda, contohnya seperti berikut:

create table tanggal (id int, timestem timestamp not null default current_timestamp, timestem2 timestamp not null default current_timestamp on update current_timestamp)
0 row(s) affected	0.046 sec
insert into tanggal (id) values (1), (2), (3)
3 row(s) affected Records: 3 Duplicates: 0 Warnings: 0	0.016 sec
select * from tanggal;
+------+---------------------+---------------------+
| id   | timestem            | timestem2           |
+------+---------------------+---------------------+
|    1 | 2021-04-24 08:14:08 | 2021-04-24 08:14:08 |
|    2 | 2021-04-24 08:14:08 | 2021-04-24 08:14:08 |
|    3 | 2021-04-24 08:14:08 | 2021-04-24 08:14:08 |
+------+---------------------+---------------------+
3 rows in set (0.00 sec)

update tanggal set id = 5 where id = 1
Query OK, 1 row affected (0.17 sec)
Rows matched: 1  Changed: 1  Warnings: 0

select * from tanggal;
+------+---------------------+---------------------+
| id   | timestem            | timestem2           |
+------+---------------------+---------------------+
|    5 | 2021-04-24 08:14:08 | 2021-04-24 08:14:25 |
|    2 | 2021-04-24 08:14:08 | 2021-04-24 08:14:08 |
|    3 | 2021-04-24 08:14:08 | 2021-04-24 08:14:08 |
+------+---------------------+---------------------+
3 rows in set (0.00 sec)

Untuk menggunakan timestamp sehingga dapat menginput data tanggal dan waktu secara otomatis maka perlu menggunakan atribut not null dan default selain itu jika ingin memperbaharui data tanggal dan waktu secara otomatis saat memodifikasi data maka diperlukan atribut on update. Biasanya contoh paling umum penggunaan time_stamp adalah saat membuat user baru pada sebuah aplikasi yang tengah dikembangkan, dengan menyimpan data registrasi dan menyimpan data saat terakhir kali melakukan perubahan informasi dari akun user.
Sampai disini pembahasan tipe data date pada mysql sudah selesai, jika ada pertanyaan, jangan sungkan untuk bertanya melalui kolom komentar. Untuk mempelajari pembahasan lainnya silahkan lihat daftar isi melalui menu Programming > MySQL > Daftar Isi belajar MySQL.
Incoming search terms:
  • mysql date
  • mysql date format
  • mysql format date
  • mysql date_format
  • mysql date now
  • date mysql
  • date in mysql
  • date format mysql
  • date mysql format
  • str to date mysql
Bayu Radityo

Seorang lulusan teknik informatika yang senang dalam berbagi ilmu pengetahuan, dan membuat karya digital berupa photomanipulation dan digital drawing. instagram external-link

Posting Komentar

Lebih baru Lebih lama