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()?


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:

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.

TIP: Jika performa query menjadi prioritas, terutama pada dataset yang besar, pertimbangkan metode rentang waktu ketimbang memanggil 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().

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()

  1. Pahami Kapan Perlu DATE() dan Kapan Perlu Rentang Waktu
    Jika dataset Anda besar dan performa query menjadi krusial, hindari melakukan DATE() di klausa WHERE secara berlebihan. Pertimbangkan menggunakan rentang waktu (BETWEEN 'YYYY-MM-DD HH:MM:SS' AND 'YYYY-MM-DD HH:MM:SS') agar index tetap optimal.
  2. Simpan Data dalam DATETIME atau TIMESTAMP Jika Butuh Waktu
    Meskipun fokus kita di artikel ini adalah DATE(), selalu pikirkan keperluan ke depan. Jangan sampai kita menyesal karena butuh data jam, menit, detik, tetapi terlanjur hanya menyimpan DATE saja.
  3. Gunakan DATE() Secara Bijak
    Memang DATE() 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.
  4. 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 hasil DATE() terutama jika data berasal dari server berbeda yang punya pengaturan waktu tak sama.
  5. Gunakan Indeks DATE Terpisah (opsional)
    Jika sering WHERE DATE(order_date), kadang kita bisa pertimbangkan menambahkan kolom order_date_only (tipe DATE) 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:

  1. 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.
  2. 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.
  3. 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.
  4. 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 :