Tutorial Belajar MySQL: Cara Mengambil Nilai Tanggal (DATE dan TIMESTAMP) MySQL

Tipe data tanggal (DATE) merupakan salah satu tipe data yang cukup sulit digunakan. Selain memerlukan format tersendiri, hasil dari kolom dengan tipe data date juga ‘terbalik’, yakni dengan format tampilan YYYY-MM-DD.

Dalam tutorial belajar MySQL kali ini saya akan membahas beberapa fungsi MySQL yang bisa digunakan untuk mengambil dan menampilkan tipe data DATE.

Penjelasan cara penggunaan tipe data DATE MySQL telah dibahas pada: Tutorial MySQL Tipe Data Date (Tanggal).

Mempersiapkan Tabel belajar_date

Sebagai tabel sample, saya akan membuat tabel belajar_date. Tabel ini terdiri dari dua kolom bertipe DATE dan TIMESTAMP. Berikut query yang saya gunakan:

mysql> CREATE TABLE belajar_date (dt DATE,ts TIMESTAMP);
Query OK, 0 rows affected (0.08 sec)
 
mysql> INSERT INTO belajar_date VALUES ('2015-08-10','2015-08-10 08:30:15');
Query OK, 1 row affected (0.03 sec)
 
mysql> INSERT INTO belajar_date VALUES ('2016-08-17','2016-08-17 10:01:01');
Query OK, 1 row affected (0.04 sec)
 
mysql> INSERT INTO belajar_date VALUES ('2017-12-31','2017-12-31 23:59:59');
Query OK, 1 row affected (0.05 sec)
 
mysql> SELECT * FROM belajar_date;
+------------+---------------------+
| dt         | ts                  |
+------------+---------------------+
| 2015-08-10 | 2015-08-10 08:30:15 |
| 2016-08-17 | 2016-08-17 10:01:01 |
| 2017-12-31 | 2017-12-31 23:59:59 |
+------------+---------------------+
3 rows in set (0.00 sec)

Seperti yang terlihat, MySQL menyimpan kolom bertipe data DATE menggunakan format YYYY-MM-DD, dan untuk tipe data TIMESTAMP dengan format YYYY-MM-DD HH:MM:SS.


Fungsi MySQL untuk Mengambil Nilai Date

MySQL menyediakan beragam fungsi untuk mengambil sebagian data dari kolom bertipe DATE dan TIMESTAMP. Sebagai contoh, kita bisa menggunakan fungsi YEAR() untuk mengambil bagian tahun, seperti query berikut ini:

mysql> SELECT YEAR(dt) FROM belajar_date;
+----------+
| YEAR(dt) |
+----------+
|     2015 |
|     2016 |
|     2017 |
+----------+
3 rows in set (0.00 sec)

Pada query diatas, saya menampilkan hanya nilai tahun dari kolom dt. Bagaimana dengan nilai Bulan dan Tanggal? Berikut querynya:

mysql> SELECT MONTH(dt) FROM belajar_date;
+-----------+
| MONTH(dt) |
+-----------+
|         8 |
|         8 |
|        12 |
+-----------+
3 rows in set (0.00 sec)
 
mysql> SELECT DAY(dt) FROM belajar_date;
+---------+
| DAY(dt) |
+---------+
|      10 |
|      17 |
|      31 |
+---------+
3 rows in set (0.00 sec)

Selain fungsi YEAR(), MONTH() dan DAY() yang saya gunakan, tabel berikut merangkum beberapa fungsi lain yang bisa digunakan untuk tipe data DATE dan TIMESTAMP:

Nama Fungsi Hasil
YEAR() Menampilkan nilai tahun
MONTH() Menampilkan nilai bulan (1..12)
MONTHNAME() Menampilkan nama bulan (January..December)
DAYOFMONTH() Menampilkan nilai tanggal (1..31)
DAYNAME() Menampilkan nama hari (Sunday..Saturday)
DAYOFWEEK() Menampilkan nilai hari (angka 1..7)
WEEKDAY() Menampilkan nilai hari (angka 0..6)
DAYOFYEAR() Menampilkan urutan hari (1..366)
HOUR() Menampilkan nilai jam (0..23)
MINUTE() Menampilkan nilai menit (0..59)
SECOND() Menampilkan nilai detik(0..59)

Dengan menggunakan fungsi-fungsi ini kita bisa mengambil nilai yang diinginkan dari kolom DATE dan TIMESTAMP:

mysql> SELECT HOUR(ts) FROM belajar_date;
+----------+
| HOUR(ts) |
+----------+
|        8 |
|       10 |
|       23 |
+----------+
3 rows in set (0.00 sec)
 
mysql> SELECT MINUTE(ts) FROM belajar_date;
+------------+
| MINUTE(ts) |
+------------+
|         30 |
|          1 |
|         59 |
+------------+
3 rows in set (0.00 sec)
 
mysql> SELECT SECOND(ts) FROM belajar_date;
+------------+
| SECOND(ts) |
+------------+
|         15 |
|          1 |
|         59 |
+------------+
3 rows in set (0.00 sec)
 
mysql> SELECT DAYOFYEAR(ts) FROM belajar_date;
+---------------+
| DAYOFYEAR(ts) |
+---------------+
|           222 |
|           230 |
|           365 |
+---------------+
3 rows in set (0.00 sec)
 
mysql> SELECT DAYNAME(ts) FROM belajar_date;
+-------------+
| DAYNAME(ts) |
+-------------+
| Monday      |
| Wednesday   |
| Sunday      |
+-------------+
3 rows in set (0.06 sec)
 
mysql> SELECT ts, DAYNAME(ts) FROM belajar_date;
+---------------------+-------------+
| ts                  | DAYNAME(ts) |
+---------------------+-------------+
| 2015-08-10 08:30:15 | Monday      |
| 2016-08-17 10:01:01 | Wednesday   |
| 2017-12-31 23:59:59 | Sunday      |
+---------------------+-------------+
3 rows in set (0.00 sec)

Fungsi CURDATE() dan NOW()

Masih berkaitan dengan tipe data date, MySQL menyediakan fungsi bawaan untuk menghasilkan nilai DATE dan TIMESTAMP sistem saat ini. Fungsi yang bisa digunakan adalah CURDATE() dan NOW().

Berikut contohnya:

mysql> INSERT INTO belajar_date VALUES (CURDATE(), NOW());
Query OK, 1 row affected (0.03 sec)
 
mysql> SELECT * FROM belajar_date;
+------------+---------------------+
| dt         | ts                  |
+------------+---------------------+
| 2015-08-10 | 2015-08-10 08:30:15 |
| 2016-08-17 | 2016-08-17 10:01:01 |
| 2017-12-31 | 2017-12-31 23:59:59 |
| 2015-08-04 | 2015-08-04 15:34:14 |
+------------+---------------------+
4 rows in set (0.00 sec)

Fungsi CURDATE() akan menghasilkan nilai DATE yang ada di server dengan format YYYY-MM-DD, sedangkan fungsi NOW() akan menghasilkan nilai TIMESTAMP dengan format YYYY-MM-DD HH:MM:SS. Dalam query diatas, saya menggunakan kedua fungsi ini untuk menginput data baru ke dalam tabel belajar_date.

Dapat anda lihat bahwa kode diatas dijalankan pada tanggal 4 Agustus 2015 pukul 15:34:14, sesuai dengan sistem komputer yang saya gunakan (baris terakhir pada tabel).


Fungsi-fungsi tanggal yang kita bahas kali ini cocok untuk menformat tampilan kolom dengan tipe data DATE dan TIMESTAMP di dalam MySQL. Untuk hasil yang lebih fleksibel, bisa menggunakan fungsi DATE_FORMAT() yang akan saya bahas pada tutorial terpisah.


Tutorial Terkait:

11 Comments

  1. dena
    02 Sep 15
  2. Androgamers
    10 Oct 16
    • Andre
      10 Oct 16
  3. aris fahujan
    05 Feb 17
    • aris fahujan
      05 Feb 17
    • Andre
      06 Feb 17
  4. Anonymous
    11 Feb 17
    • Andre
      11 Feb 17
  5. gdg
    05 May 17
    • Andre
      05 May 17
  6. noor rahman
    05 Jul 17

Add Comment