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 , 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