Manipulasi tanggal adalah operasi yang sangat umum dalam database. MySQL menyediakan berbagai fungsi untuk menambah, mengurangi, dan memanipulasi nilai tanggal. Tutorial ini akan membahas semua fungsi terkait tanggal di MySQL.
Fungsi DATE_ADD digunakan untuk menambah interval tertentu pada tanggal:
-- Tambah 7 hari
SELECT DATE_ADD('2025-01-01', INTERVAL 7 DAY);
-- Tambah 3 bulan
SELECT DATE_ADD('2025-01-01', INTERVAL 3 MONTH);
-- Tambah 1 tahun
SELECT DATE_ADD('2025-01-01', INTERVAL 1 YEAR);
-- Tambah 2 jam 30 menit
SELECT DATE_ADD('2025-01-01 10:00:00', INTERVAL '2:30' HOUR_MINUTE);
-- Tambah 15 menit
SELECT DATE_ADD(NOW(), INTERVAL 15 MINUTE);
Fungsi DATE_SUB digunakan untuk mengurangi interval dari tanggal:
-- Kurangi 7 hari
SELECT DATE_SUB('2025-01-01', INTERVAL 7 DAY);
-- Kurangi 3 bulan
SELECT DATE_SUB(CURDATE(), INTERVAL 3 MONTH);
-- Kurangi 1 tahun
SELECT DATE_SUB(CURDATE(), INTERVAL 1 YEAR);
-- Kurangi 30 hari dari sekarang
SELECT DATE_SUB(NOW(), INTERVAL 30 DAY);
Fungsi DATEDIFF menghitung selisih hari antara dua tanggal:
-- Selisih hari antara dua tanggal
SELECT DATEDIFF('2025-12-31', '2025-01-01') AS selisih_hari;
-- Hasil: 364
-- Selisih dari tanggal sekarang
SELECT DATEDIFF(CURDATE(), '2025-01-01') AS hari_sejak_awal_tahun;
-- Filter data berdasarkan rentang tanggal
SELECT * FROM orders
WHERE DATEDIFF(CURDATE(), order_date) <= 30;
Untuk menghitung selisih dalam satuan yang lebih spesifik:
-- Selisih dalam bulan
SELECT TIMESTAMPDIFF(MONTH, '2025-01-01', '2025-06-01');
-- Hasil: 5
-- Selisih dalam tahun
SELECT TIMESTAMPDIFF(YEAR, '2020-01-01', CURDATE());
-- Selisih dalam jam
SELECT TIMESTAMPDIFF(HOUR, '2025-01-01 08:00:00', '2025-01-01 17:00:00');
-- Hasil: 9
MySQL juga mendukung operasi tanggal langsung:
-- Tambah hari
SELECT CURDATE() + INTERVAL 30 DAY;
-- Kurangi bulan
SELECT CURDATE() - INTERVAL 6 MONTH;
-- Tambah tahun
SELECT '2025-01-01' + INTERVAL 1 YEAR;
1. Filter data 7 hari terakhir:
SELECT * FROM orders
WHERE order_date >= DATE_SUB(CURDATE(), INTERVAL 7 DAY);
2. Hitung umur dari tanggal lahir:
SELECT name,
TIMESTAMPDIFF(YEAR, birth_date, CURDATE()) AS umur
FROM users;
3. Update tanggal expired:
UPDATE subscriptions
SET expired_date = DATE_ADD(CURDATE(), INTERVAL 30 DAY)
WHERE user_id = 1;
4. Group by bulan:
SELECT DATE_FORMAT(order_date, '%Y-%m') AS bulan,
COUNT(*) AS total
FROM orders
GROUP BY DATE_FORMAT(order_date, '%Y-%m')
ORDER BY bulan;
MySQL menyediakan fungsi yang sangat lengkap untuk manipulasi tanggal. DATE_ADD dan DATE_SUB untuk menambah/mengurangi, DATEDIFF dan TIMESTAMPDIFF untuk menghitung selisih. Pahami fungsi-fungsi ini untuk mempermudah query yang berkaitan dengan tanggal.