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.
\n\nFungsi DATE_ADD digunakan untuk menambah interval tertentu pada tanggal:
\n-- Tambah 7 hari\nSELECT DATE_ADD('2025-01-01', INTERVAL 7 DAY);\n\n-- Tambah 3 bulan\nSELECT DATE_ADD('2025-01-01', INTERVAL 3 MONTH);\n\n-- Tambah 1 tahun\nSELECT DATE_ADD('2025-01-01', INTERVAL 1 YEAR);\n\n-- Tambah 2 jam 30 menit\nSELECT DATE_ADD('2025-01-01 10:00:00', INTERVAL '2:30' HOUR_MINUTE);\n\n-- Tambah 15 menit\nSELECT DATE_ADD(NOW(), INTERVAL 15 MINUTE);\n\nFungsi DATE_SUB digunakan untuk mengurangi interval dari tanggal:
\n-- Kurangi 7 hari\nSELECT DATE_SUB('2025-01-01', INTERVAL 7 DAY);\n\n-- Kurangi 3 bulan\nSELECT DATE_SUB(CURDATE(), INTERVAL 3 MONTH);\n\n-- Kurangi 1 tahun\nSELECT DATE_SUB(CURDATE(), INTERVAL 1 YEAR);\n\n-- Kurangi 30 hari dari sekarang\nSELECT DATE_SUB(NOW(), INTERVAL 30 DAY);\n\nFungsi DATEDIFF menghitung selisih hari antara dua tanggal:
\n-- Selisih hari antara dua tanggal\nSELECT DATEDIFF('2025-12-31', '2025-01-01') AS selisih_hari;\n-- Hasil: 364\n\n-- Selisih dari tanggal sekarang\nSELECT DATEDIFF(CURDATE(), '2025-01-01') AS hari_sejak_awal_tahun;\n\n-- Filter data berdasarkan rentang tanggal\nSELECT * FROM orders \nWHERE DATEDIFF(CURDATE(), order_date) <= 30;\n\nUntuk menghitung selisih dalam satuan yang lebih spesifik:
\n-- Selisih dalam bulan\nSELECT TIMESTAMPDIFF(MONTH, '2025-01-01', '2025-06-01');\n-- Hasil: 5\n\n-- Selisih dalam tahun\nSELECT TIMESTAMPDIFF(YEAR, '2020-01-01', CURDATE());\n\n-- Selisih dalam jam\nSELECT TIMESTAMPDIFF(HOUR, '2025-01-01 08:00:00', '2025-01-01 17:00:00');\n-- Hasil: 9\n\nMySQL juga mendukung operasi tanggal langsung:
\n-- Tambah hari\nSELECT CURDATE() + INTERVAL 30 DAY;\n\n-- Kurangi bulan\nSELECT CURDATE() - INTERVAL 6 MONTH;\n\n-- Tambah tahun\nSELECT '2025-01-01' + INTERVAL 1 YEAR;\n\n1. Filter data 7 hari terakhir:
\nSELECT * FROM orders \nWHERE order_date >= DATE_SUB(CURDATE(), INTERVAL 7 DAY);\n\n2. Hitung umur dari tanggal lahir:
\nSELECT name, \n TIMESTAMPDIFF(YEAR, birth_date, CURDATE()) AS umur\nFROM users;\n\n3. Update tanggal expired:
\nUPDATE subscriptions \nSET expired_date = DATE_ADD(CURDATE(), INTERVAL 30 DAY)\nWHERE user_id = 1;\n\n4. Group by bulan:
\nSELECT DATE_FORMAT(order_date, '%Y-%m') AS bulan, \n COUNT(*) AS total \nFROM orders \nGROUP BY DATE_FORMAT(order_date, '%Y-%m')\nORDER BY bulan;\n\nMySQL 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.