Fungsi DATE() Pada MySql
Halo! Pada kesempatan kali ini, kita akan membahas mengenai salah satu fungsi bawaan MySQL yang kerap kali dipakai untuk keperluan manajemen data tanggal, yaitu DATE()
. Apakah kamu pernah ingin menampilkan hanya bagian tanggal tanpa jamnya? Atau melakukan filter pada data yang hanya berdasarkan tanggalnya saja, terlepas dari jam, menit, maupun detik? Di sinilah DATE()
berperan penting.
Artikel ini akan mengulas apa itu DATE()
pada MySQL, bagaimana cara menggunakannya, serta menampilkan beberapa contoh aplikasi dalam berbagai skenario penggunaan. Kita juga akan membahas praktik terbaik agar kamu bisa memanfaatkannya dengan maksimal dalam proyek database-mu. Seluruh isi artikel ini akan disampaikan dengan gaya semi-santai supaya lebih mudah dipahami, tapi tetap padat informasi. Jadi, ayo kita mulai!
Apa Itu Fungsi DATE()
di MySQL?
Secara sederhana, DATE()
adalah sebuah built-in function pada MySQL yang berfungsi untuk mengambil atau mengekstrak bagian tanggal (year-month-day) dari suatu nilai DATETIME
atau TIMESTAMP
. Hasil dari DATE()
ini memiliki format YYYY-MM-DD
.
Bayangkan kita memiliki data berjenis DATETIME
seperti '2025-03-15 14:30:45'
. Saat kita terapkan DATE()
pada nilai tersebut, maka yang akan keluar hanyalah '2025-03-15'
. Seluruh komponen jam (waktu) diabaikan—jadi praktis untuk kasus ketika kita perlu membandingkan data secara harian saja, atau menampilkan info tanggal tanpa perlu menunjukkan jam.
Kapan Kita Membutuhkan DATE()
?
- Menampilkan Tanggal Tanpa Waktu: Contohnya, ketika membuat laporan harian dan kita cuma butuh tahu tanggal entri data tanpa jam.
-
Membandingkan Tanggal: Jika ingin menyeleksi data dari hari tertentu, atau rentang hari tertentu, sering kali kita gunakan
DATE()
atau fungsi sejenis untuk filtering. -
Pengelompokan Data berdasarkan Tanggal: Ketika kita mau buat laporan summary daily, kita bisa memanfaatkan
DATE()
untuk “memotong†jam, menit, dan detik, lalu mengelompokkan data hanya berdasarkan tanggal. -
Fleksibilitas Format: Meskipun
DATE()
tidak langsung mengubah format tampilan (itu bisa memakaiDATE_FORMAT()
),DATE()
tetap berguna untuk memastikan hanya tanggal yang terambil, lalu bisa dipadu denganDATE_FORMAT()
untuk tampilan yang lebih human-friendly.
Cara Dasar Menggunakan Fungsi DATE()
Sebenarnya, penggunaan DATE()
sangatlah sederhana. Contoh termudahnya adalah mengekstrak tanggal dari fungsi NOW()
:
SELECT DATE(NOW()) AS 'HanyaTanggal';
Jika saat ini server MySQL berada di tanggal 15 Maret 2025 jam 14:30, maka hasilnya akan tampak seperti 2025-03-15
. Enggak ada jam, menit, atau detik.
Tentunya, dalam prakteknya, penggunaan DATE()
sering terjadi ketika kita memiliki kolom berjenis DATETIME. Misalnya, ada tabel bernama orders
dengan kolom order_date
bertipe DATETIME
. Kita bisa melakukan:
SELECT order_id, DATE(order_date) AS tanggal_order
FROM orders;
Kita akan mendapatkan list order_id
beserta tanggal-nya saja, tanpa jam.
Format Hasil dari DATE()
Seperti yang sudah disebutkan, hasil default DATE()
adalah format YYYY-MM-DD
. Namun ingat, ini masih bergantung pada bagaimana MySQL secara internal menyimpan data tanggal, dan fungsi DATE()
akan mengembalikan sebuah nilai date. Ia bukan string sembarangan, melainkan date object di dalam MySQL.
Jika kamu perlu format tertentu (misalnya DD-MM-YYYY
), kamu boleh mengombinasikannya dengan DATE_FORMAT()
. Contoh:
SELECT DATE_FORMAT(DATE(order_date), '%d-%m-%Y') AS 'TanggalCustom'
FROM orders;
Tapi, fungsi DATE()
sendiri tidak memformat tampilan, ia hanya membuang bagian waktu. DATE_FORMAT()
adalah fungsi lanjutan untuk menyesuaikan penampilan hasil ke dalam format yang diinginkan.
Contoh Penggunaan DATE()
dalam Berbagai Kasus
1. Filter Data Berdasarkan Tanggal Tertentu
Suatu saat, kita mungkin ingin mengambil data transaksi yang terjadi pada tanggal 15 Maret 2025 saja, terlepas dari jam berapa pun transaksi itu berlangsung. Kita bisa melakukan:
SELECT *
FROM orders
WHERE DATE(order_date) = '2025-03-15';
Apa yang terjadi di sini? Kolom order_date
yang mungkin tersimpan sebagai 2025-03-15 09:10:00
, 2025-03-15 12:30:55
, dan sebagainya, semuanya akan diambil asalkan bagian tanggall sama dengan '2025-03-15'
. Jam berapa pun transaksi itu tercatat, asal di tanggal 15 Maret 2025, query ini akan menampilkannya.
Proses di atas lebih efektif ketimbang kita mengecek WHERE order_date BETWEEN '2025-03-15 00:00:00' AND '2025-03-15 23:59:59'
. Tentu cara BETWEEN
masih valid, tapi kadang menulis DATE(order_date) = '2025-03-15'
terasa lebih intuitif.
2. Mengetahui Jumlah Transaksi per Hari
Jika kita punya data order yang bejibun, kita mungkin ingin tahu berapa banyak transaksi per harinya. Caranya, kita bisa menggunakan DATE()
dalam klausa GROUP BY
:
SELECT DATE(order_date) AS tanggal,
COUNT(*) AS total_transaksi
FROM orders
GROUP BY DATE(order_date);
Hasilnya, tiap baris akan menampilkan satu tanggal unik berikut dengan jumlah transaksi yang terjadi di tanggal tersebut. Dari sini, kita bisa analisis tren penjualan harian, misalnya tanggal-tanggal tertentu yang ramai pesanan.
3. Menampilkan Kolom Tanggal untuk Laporan Harian
Kita pun bisa mencetak sebuah laporan dengan tampilan tanggal rapi di layar. Misalnya:
SELECT
order_id,
DATE(order_date) AS 'TanggalPesanan',
customer_name
FROM orders;
Kolom TanggalPesanan
akan menampilkan informasi tanggal, tanpa jam, sehingga memudahkan pembacaan. Apalagi untuk laporan-laporan yang sifatnya summarizing atau di-print dalam bentuk PDF, tampilan “hari-bulan-tahun†saja sudah cukup.
4. Menggabungkan DATE()
dengan Fungsi Lain (Misal DATE_ADD
, DATE_SUB
, dsb.)
Kadang, DATE()
bisa dikombinasikan dengan fungsi-fungsi manipulasi tanggal lainnya, seperti DATE_ADD()
, DATE_SUB()
, DAYOFWEEK()
, dan sebagainya. Contoh menariknya: kita mau menampilkan hari (dalam bentuk teks, misalnya senin, selasa, rabu) dari kolom order_date
dan hanya butuh bagian tanggal. Kita bisa pakai:
SELECT
DATE(order_date) AS 'TanggalSaja',
DAYNAME(DATE(order_date)) AS 'NamaHari'
FROM orders;
Di sini, DATE()
berguna untuk memastikan kita mengambil tanggal, lalu DAYNAME()
akan memetakan hari apa. Hasilnya, kita bisa tahu apakah kebanyakan pesanan datang di hari Senin, Sabtu, atau Minggu.
5. DATE()
vs CURDATE()
Mungkin kita pernah melihat fungsi CURDATE()
. Fungsinya adalah mengembalikan tanggal saat ini (tanggal server) dalam format YYYY-MM-DD
. Lantas, apa bedanya dengan DATE()
? Sederhananya:
-
DATE()
membutuhkan parameter (biasanyaDATETIME
atauTIMESTAMP
). -
CURDATE()
tidak membutuhkan parameter karena otomatis mengambil nilai tanggal hari ini berdasarkan pengaturan waktu server.
Jadi, kalau kita mau mengekstrak tanggal dari kolom order_date
, gunakan DATE(order_date)
. Tapi kalau kita cuma mau tahu hari ini tanggal berapa, pakailah CURDATE()
.
Efek Penggunaan DATE()
pada Index dan Performa Query
Salah satu poin yang perlu diperhatikan ketika kita menggunakan DATE()
dalam WHERE
-clause adalah efeknya terhadap index. Apabila kolom order_date
di-index secara penuh (kolom DATETIME
misalnya), lalu kita menulis DATE(order_date) = '2025-03-15'
, MySQL kadang tidak bisa memanfaatkan index tersebut secara optimal (tergantung versi MySQL dan optimisasi internal), karena kita menerapkan function (yakni DATE()
) pada kolom.
Sebaliknya, jika kita menulis:
WHERE order_date >= '2025-03-15 00:00:00'
AND order_date < '2025-03-16 00:00:00'
maka index pada kolom order_date
bisa dimanfaatkan seutuhnya. Hal ini karena kita tidak memanggil fungsi apa pun pada kolom yang di-index.
DATE()
di klausa WHERE
. Namun, untuk kemudahan menulis kode atau untuk data skala kecil-menengah, memfilter menggunakan DATE()
langsung di kolom masih sangat umum digunakan.
Studi Kasus: Aplikasi Pemesanan Makanan
Bayangkan kita memiliki sebuah online food ordering system. Terdapat tabel orders
dengan beberapa kolom kunci seperti:
CREATE TABLE orders (
order_id INT AUTO_INCREMENT PRIMARY KEY,
customer_id INT,
order_date DATETIME,
total_amount DECIMAL(10,2),
status VARCHAR(20)
);
Sekarang, mari kita bayangkan beberapa skenario penggunaan DATE()
yang kerap muncul dalam aplikasi semacam ini.
1. Menampilkan Pesanan yang Terjadi Hari Ini
Kita bisa menampilkan semua pesanan yang terjadi pada tanggal hari ini dengan memanfaatkan CURDATE()
atau DATE()
. Salah satu contoh query:
SELECT order_id, customer_id, total_amount
FROM orders
WHERE DATE(order_date) = CURDATE();
Query ini berguna untuk menampilkan pesanan pada hari berjalan. Jadi, kalau admin aplikasi buka dashboard di pagi atau sore hari, ia bisa langsung melihat daftar pesanan yang masuk hari ini tanpa perlu menampilkan jam.
2. Membuat Laporan Pendapatan per Hari
Untuk melihat berapa total pendapatan (revenue) per hari, kita bisa melakukan grouping menggunakan DATE()
:
SELECT DATE(order_date) AS tanggal,
SUM(total_amount) AS total_pendapatan
FROM orders
GROUP BY DATE(order_date)
ORDER BY tanggal DESC;
Dengan cara ini, kita memperoleh total pendapatan harian, diurutkan dari tanggal terbaru ke tanggal paling lama. Cocok banget buat laporan keuangan harian yang sifatnya sederhana.
3. Melihat Rekap Pesanan dalam Rentang Waktu
Kita seringkali butuh menampilkan data pesanan dalam rentang tanggal tertentu, misalnya minggu lalu sampai minggu ini. Di sinilah DATE()
bisa digabungkan dengan BETWEEN
:
SELECT *
FROM orders
WHERE DATE(order_date) BETWEEN '2025-03-01' AND '2025-03-07'
ORDER BY order_date ASC;
Maka sistem akan menampilkan semua pesanan yang terjadi pada tanggal 1 Maret 2025 sampai 7 Maret 2025. Jam berapa pesanan terjadi tidak jadi soal, karena kita hanya membandingkan tanggal saja.
4. Mengirim Notifikasi ke Pelanggan Jika Pesanan Belum Diambil per Tanggal
Misalkan kita punya sistem di mana pelanggan melakukan pre-order makanan. Kita ingin mengirim pengingat jika dalam 2 hari setelah tanggal pemesanan (order_date
), pesanan masih berstatus pending atau belum diambil. Maka kita bisa mengekstrak DATE(order_date)
dan membandingkannya dengan CURDATE()
(atau NOW()
), kurang lebih seperti ini:
SELECT order_id, customer_id
FROM orders
WHERE status = 'pending'
AND DATE(order_date) < DATE_SUB(CURDATE(), INTERVAL 1 DAY);
Dalam contoh ini, kita lihat semua pesanan yang masih pending, dan order_date
-nya lebih lama dari (hari ini - 1 hari). Setelah data didapat, kita bisa memproses notifikasi atau semacam email reminder agar pelanggan segera mengambil atau menyelesaikan pesanannya.
Perbedaan DATE
dengan Tipe Data DATE
di MySQL
Sekilas, kita harus bedakan antara tipe data DATE
dan fungsi DATE()
.
-
Tipe data
DATE
adalah format penyimpanan di MySQL yang hanya menampung data “tahun-bulan-tanggal†(tanpa jam, menit, detik). Contoh nilai valid:2025-03-15
. -
Fungsi
DATE()
adalah function yang mengekstrak komponen “date†dari nilaiDATETIME
,TIMESTAMP
, atau bahkanDATE
itu sendiri. Hasilnya adalah date value (formatYYYY-MM-DD
).
Kalau kita memang tidak butuh jam sama sekali di database, kita bisa mempertimbangkan menyimpan kolom bertipe DATE
saja. Namun, kalau ada kemungkinan kita akan butuh jam di masa depan, lebih aman menggunakan DATETIME
atau TIMESTAMP
, lalu pakai DATE()
bila diperlukan mengekstraknya.
Penggunaan DATE()
dalam Trigger dan Stored Procedure
Jika kita punya trigger yang butuh mencatat hanya tanggal dari suatu kolom DATETIME
, kita bisa gunakan DATE()
di dalam definisi trigger. Misalnya, kita ingin setiap kali ada pesanan baru masuk, kita simpan hanya tanggalnya di tabel daily_summary
. Mungkin kita menulis:
CREATE TRIGGER trg_orders_after_insert
AFTER INSERT ON orders
FOR EACH ROW
BEGIN
INSERT INTO daily_summary (order_date, total_amount)
VALUES (DATE(NEW.order_date), NEW.total_amount);
END;
Pada trigger ini, kita mengekstrak tanggal saja dari NEW.order_date
dan menyimpannya di daily_summary
. Sehingga di tabel daily_summary
kita hanya fokus pada date (tipe data bisa DATE
) dan total pemasukan, misalnya.
Begitu juga pada stored procedure. Mungkin kita punya stored procedure untuk mengolah laporan tertentu, di mana kita cukup pakai DATE()
saat memilih data yang relevan.
Best Practices Menggunakan DATE()
-
Pahami Kapan Perlu
DATE()
dan Kapan Perlu Rentang Waktu
Jika dataset Anda besar dan performa query menjadi krusial, hindari melakukanDATE()
di klausaWHERE
secara berlebihan. Pertimbangkan menggunakan rentang waktu (BETWEEN 'YYYY-MM-DD HH:MM:SS' AND 'YYYY-MM-DD HH:MM:SS'
) agar index tetap optimal. -
Simpan Data dalam
DATETIME
atauTIMESTAMP
Jika Butuh Waktu
Meskipun fokus kita di artikel ini adalahDATE()
, selalu pikirkan keperluan ke depan. Jangan sampai kita menyesal karena butuh data jam, menit, detik, tetapi terlanjur hanya menyimpanDATE
saja. -
Gunakan
DATE()
Secara Bijak
MemangDATE()
sangat mempermudah coding, terutama untuk filter dan grouping. Namun, selalu cek apakah penggunaan fungsi ini sudah sesuai konteks. Terkadang, kita sebenarnya perlu detail jam untuk analisis yang lebih mendalam. -
Jangan Lupa Pertimbangkan Time Zone
Jika aplikasi kamu lintas negara atau user-nya punya time zone berbeda, catat apakah server MySQL disetel ke UTC atau zona waktu setempat. Bagian ini bisa memengaruhi hasilDATE()
terutama jika data berasal dari server berbeda yang punya pengaturan waktu tak sama. -
Gunakan Indeks
DATE
Terpisah (opsional)
Jika seringWHERE DATE(order_date)
, kadang kita bisa pertimbangkan menambahkan kolomorder_date_only
(tipeDATE
) yang diisi melalui trigger. Hal ini bisa di-index secara terpisah untuk filter per tanggal. Tapi tentu menambah overhead penyimpanan, jadi lihat kembali kebutuhan.
Contoh Skenario Lengkap
Kita tutup sesi contoh dengan skenario sebuah aplikasi event booking. Misalnya, ada tabel event_tickets
:
CREATE TABLE event_tickets (
ticket_id INT AUTO_INCREMENT PRIMARY KEY,
event_name VARCHAR(100),
ticket_date DATETIME,
holder_name VARCHAR(100)
);
Kita gunakan DATE()
dalam berbagai cara:
-
Menampilkan Tanggal Event Saja
SELECT event_name, DATE(ticket_date) AS 'TanggalEvent' FROM event_tickets;
Di sini, kita hanya mau tahu event berlangsung pada tanggal berapa, tidak peduli jamnya. -
Menarik Data Event pada Hari Tertentu
SELECT * FROM event_tickets WHERE DATE(ticket_date) = '2025-04-01';
Kita mau melihat semua tiket untuk event yang diadakan tepat di tanggal 1 April 2025. -
Rekap Tiket Terjual per Tanggal
SELECT DATE(ticket_date) AS 'Tanggal', COUNT(*) AS 'JumlahTiket' FROM event_tickets GROUP BY DATE(ticket_date);
Ini berguna untuk melihat puncak penjualan tiket di tanggal berapa saja. -
Pemberian Diskon pada Event Tertentu
Bisa saja kita punya stored procedure yang mengecek tanggal event, lalu memberikan diskon khusus untuk event yang jatuh di hari Minggu, atau di tanggal-tanggal tertentu. Contohnya:DAYNAME(DATE(ticket_date)) = 'Sunday'
.
Dalam dunia nyata, DATE()
amat sering kita jumpai pada skenario-skenario seperti di atas.
Catatan Penting
Fungsi DATE()
di MySQL adalah cara sederhana namun kuat untuk mengolah dan menampilkan hanya komponen tanggal dari suatu nilai datetime. Dengan DATE()
, kita bisa memfokuskan query kita pada hari, bulan, dan tahun, tanpa harus berurusan dengan jam, menit, atau detik. Meskipun begitu, pemanfaatan DATE()
perlu tetap menimbang performa dan pemanfaatan index di database. Jika dataset-mu besar dan kamu mendambakan kecepatan, memakai rentang waktu eksplisit di WHERE
-clause mungkin lebih efisien. Namun, untuk kebanyakan kasus menengah ataupun situasi di mana kemudahan penulisan query lebih diutamakan, DATE()
adalah solusi yang praktis dan mudah dipahami. Jangan lupa juga untuk mempertimbangkan zona waktu jika aplikasi berjalan lintas batas geografis. Dan yang paling penting, selalu pilih tipe data yang sesuai—apakah DATE
, DATETIME
, atau TIMESTAMP
—agar data dan logika aplikasi bisa berjalan selaras. Selamat bereksplorasi dengan DATE()
di MySQL!
Baca Juga :