- 1 1. Introduction
- 2 2. Overview of MySQL Date Data Types
- 3 3. How to Compare Dates
- 4 4. Calculating Date Differences
- 5 5. Date Addition and Subtraction
- 6 6. Contoh Kueri Praktis
- 7 7. Optimasi Performa
- 8 8. FAQ (Pertanyaan yang Sering Diajukan)
- 8.1 Q1: Apa perbedaan antara DATE dan DATETIME?
- 8.2 Q2: Apa yang harus saya perhatikan saat menentukan rentang tanggal menggunakan BETWEEN?
- 8.3 Q3: Bagaimana menangani perbedaan zona waktu?
- 8.4 Q4: Bagaimana saya bisa mengambil data dari 30 hari yang lalu?
- 8.5 Q5: Bagaimana cara meningkatkan kinerja perbandingan tanggal?
- 9 9. Ringkasan
1. Introduction
Handling dates in MySQL is one of the most important aspects of database operations. For example, when aggregating sales data by date or searching records within a specific period, date comparison becomes essential.
This article explains everything from the basics of date manipulation and comparison in MySQL to advanced use cases and performance optimization techniques. It is designed to be useful for users at all levels, from beginners to intermediate developers.
2. Overview of MySQL Date Data Types
Types of Date Data Types and Their Characteristics
MySQL provides the following three main date data types. Below is a brief explanation of each.
- DATE
- Stored Value: Year-Month-Day (
YYYY-MM-DD) - Characteristics: Does not include time information, making it suitable for managing simple dates.
- Use Cases: Birthdays, deadlines.
- DATETIME
- Stored Value: Year-Month-Day and Time (
YYYY-MM-DD HH:MM:SS) - Characteristics: Includes time information, making it suitable for recording precise timestamps.
- Use Cases: Creation timestamps, last updated timestamps.
- TIMESTAMP
- Stored Value: Year-Month-Day and Time (
YYYY-MM-DD HH:MM:SS) - Characteristics: Time zone dependent, making it useful for managing date and time across different regions.
- Use Cases: Log data, transaction records.
How to Choose the Appropriate Data Type
- If time is not required, choose DATE .
- If time is required, choose DATETIME or TIMESTAMP depending on your application’s time zone requirements.
Sample Query
Below is an example using each data type.
CREATE TABLE events (
event_id INT AUTO_INCREMENT PRIMARY KEY,
event_date DATE,
event_datetime DATETIME,
event_timestamp TIMESTAMP
);
3. How to Compare Dates
Using Basic Comparison Operators
In MySQL, the following operators are used for date comparison.
=(Equal)
- Retrieves records that match the specified date.
SELECT * FROM events WHERE event_date = '2025-01-01';
>/<(Greater Than / Less Than)
- Searches for records before or after the specified date.
SELECT * FROM events WHERE event_date > '2025-01-01';
<=/>=(Less Than or Equal / Greater Than or Equal)
- Searches within a range that includes the specified date.
SELECT * FROM events WHERE event_date <= '2025-01-10';
Range Queries Using BETWEEN
The BETWEEN operator allows you to easily specify a date range.
SELECT * FROM events
WHERE event_date BETWEEN '2025-01-01' AND '2025-01-31';
Important Note:
BETWEENincludes both the start and end values, so make sure no required data is unintentionally excluded from your range.
4. Calculating Date Differences
Using the DATEDIFF Function
The DATEDIFF() function calculates the difference (in days) between two dates.
SELECT DATEDIFF('2025-01-10', '2025-01-01') AS days_difference;
Result:
- 9 days
Using the TIMESTAMPDIFF Function
The TIMESTAMPDIFF() function allows you to calculate the difference in specific units such as years, months, days, or hours.
SELECT TIMESTAMPDIFF(MONTH, '2025-01-01', '2025-12-31') AS months_difference;
Result:
- 11 months
5. Date Addition and Subtraction
Date Manipulation Using the INTERVAL Clause
In MySQL, you can easily add or subtract time from a date using the INTERVAL clause. This allows you to create queries that retrieve dates before or after a specific period.
Adding to a Date
Example of adding time to a date using INTERVAL:
SELECT DATE_ADD('2025-01-01', INTERVAL 7 DAY) AS plus_seven_days;
Result:
2025-01-08
Subtracting from a Date
You can subtract time from a date in a similar way using INTERVAL:
SELECT DATE_SUB('2025-01-01', INTERVAL 1 MONTH) AS minus_one_month;
Hasil:
2024-12-01
Kasus Penggunaan: Sistem Pengingat
Di bawah ini adalah contoh kueri yang mengambil peristiwa yang terjadi tepat tujuh hari yang lalu, yang dapat digunakan untuk mengirim notifikasi pengingat otomatis.
SELECT event_name, event_date
FROM events
WHERE event_date = DATE_SUB(CURDATE(), INTERVAL 7 DAY);
Perhitungan Berdasarkan Tanggal Saat Ini
CURDATE(): Mengembalikan tanggal saat ini (YYYY-MM-DD).NOW(): Mengembalikan tanggal dan waktu saat ini (YYYY-MM-DD HH:MM:SS).
Contoh: Hitung tanggal satu minggu dari hari ini.
SELECT DATE_ADD(CURDATE(), INTERVAL 7 DAY) AS next_week;
6. Contoh Kueri Praktis
Mengambil Rekaman untuk Tanggal Tertentu
Ambil peristiwa yang cocok dengan tanggal yang ditentukan.
SELECT *
FROM events
WHERE event_date = '2025-01-01';
Mengambil Data Dalam Rentang Tanggal
Contoh pencarian peristiwa dalam rentang satu minggu.
SELECT *
FROM events
WHERE event_date BETWEEN '2025-01-01' AND '2025-01-07';
Mengagregasi Data berdasarkan Tanggal
Kueri ini menghitung berapa banyak peristiwa yang terdaftar untuk setiap bulan.
SELECT MONTH(event_date) AS event_month, COUNT(*) AS total_events
FROM events
GROUP BY MONTH(event_date);
Hasil Contoh:
| event_month | total_events |
|---|---|
| 1 | 10 |
| 2 | 15 |
7. Optimasi Performa
Pencarian Efisien Menggunakan Indeks
Membuat indeks pada kolom tanggal dapat meningkatkan performa kueri secara signifikan.
Membuat Indeks
SQL berikut membuat indeks pada kolom event_date.
CREATE INDEX idx_event_date ON events(event_date);
Memeriksa Efek Indeks
Anda dapat menggunakan EXPLAIN untuk memeriksa rencana eksekusi kueri.
EXPLAIN SELECT *
FROM events
WHERE event_date = '2025-01-01';
Catatan Penting Saat Menggunakan Fungsi
Menggunakan fungsi dalam klausa WHERE dapat menonaktifkan penggunaan indeks.
Contoh Buruk
Dalam kueri berikut, fungsi DATE() mencegah penggunaan indeks.
SELECT *
FROM events
WHERE DATE(event_date) = '2025-01-01';
Contoh yang Diperbaiki
Disarankan untuk membandingkan nilai secara langsung tanpa menggunakan fungsi.
SELECT *
FROM events
WHERE event_date >= '2025-01-01'
AND event_date < '2025-01-02';

8. FAQ (Pertanyaan yang Sering Diajukan)
Q1: Apa perbedaan antara DATE dan DATETIME?
- A1:
- DATE: Hanya menyimpan tanggal (
YYYY-MM-DD). Gunakan ketika informasi waktu tidak diperlukan. - DATETIME: Menyimpan tanggal dan waktu (
YYYY-MM-DD HH:MM:SS). Gunakan ketika timestamp tepat dari suatu peristiwa diperlukan.
Contoh:
CREATE TABLE examples (
example_date DATE,
example_datetime DATETIME
);
Q2: Apa yang harus saya perhatikan saat menentukan rentang tanggal menggunakan BETWEEN?
- A2:
- Karena
BETWEENmencakup tanggal mulai dan akhir, jika tanggal akhir tidak mencakup nilai waktu, Anda mungkin tidak mengambil semua rekaman yang dimaksud.
Contoh:
-- This query may not retrieve records such as "2025-01-31 23:59:59"
SELECT *
FROM events
WHERE event_date BETWEEN '2025-01-01' AND '2025-01-31';
Perbaikan:
Atur waktu akhir secara eksplisit ke 23:59:59 atau gunakan perbandingan yang mengabaikan bagian waktu.
SELECT *
FROM events
WHERE event_date >= '2025-01-01' AND event_date < '2025-02-01';
Q3: Bagaimana menangani perbedaan zona waktu?
- A3: Di MySQL, tipe
TIMESTAMPbergantung pada zona waktu. Sebaliknya, tipeDATETIMEmenyimpan nilai tetap dan tidak terpengaruh oleh zona waktu.
Periksa pengaturan zona waktu saat ini:
SHOW VARIABLES LIKE 'time_zone';
Ubah pengaturan zona waktu:
SET time_zone = '+09:00'; -- Japan Standard Time (JST)
Q4: Bagaimana saya bisa mengambil data dari 30 hari yang lalu?
- A4: Anda dapat menggabungkan
CURDATE()atauNOW()denganINTERVALuntuk mengambil data dari 30 hari yang lalu.
Contoh:
SELECT *
FROM events
WHERE event_date >= DATE_SUB(CURDATE(), INTERVAL 30 DAY);
Q5: Bagaimana cara meningkatkan kinerja perbandingan tanggal?
- A5:
- Buat indeks: Tetapkan indeks pada kolom tanggal.
- Hindari penggunaan fungsi: Menggunakan fungsi dalam klausa
WHEREdapat menonaktifkan indeks, jadi gunakan perbandingan langsung sebagai gantinya.
9. Ringkasan
Poin Penting Artikel Ini
Artikel ini memberikan penjelasan komprehensif tentang manipulasi tanggal dan teknik perbandingan di MySQL. Poin-poin utama adalah sebagai berikut:
- Memahami karakteristik dan penggunaan yang tepat dari tipe data tanggal (DATE, DATETIME, TIMESTAMP).
- Metode perbandingan dasar (
=,>,<,BETWEEN, dll.). - Menghitung selisih tanggal (
DATEDIFF(),TIMESTAMPDIFF()). - Meningkatkan kinerja melalui pengindeksan dan desain kueri yang optimal.
Kami harap panduan ini membantu Anda menangani operasi tanggal di MySQL secara efisien dan mengembangkan kueri yang praktis serta dioptimalkan untuk aplikasi dunia nyata.


