Database

Menambah atau Mengurangi Tanggal di MySQL

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

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

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

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;

Fungsi TIMESTAMPDIFF()

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

Operasi Langsung dengan Operator + dan -

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;

Contoh Praktis

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;

Interval yang Didukung

  • SECOND, MINUTE, HOUR
  • DAY, WEEK, MONTH, QUARTER, YEAR
  • HOUR_MINUTE, YEAR_MONTH
  • DAY_HOUR, DAY_MINUTE, DAY_SECOND

Kesimpulan

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.


You may also like


0 Comments


Leave a Reply

Scroll to Top