datepart syntax
Parameter datepart mendefinisikan satuan waktu untuk menghitung selisih. SQL Server mendukung nilai datepart berikut:
| Datepart | Alias |
|---|---|
year | yy, yyyy |
quarter | qq, q |
month | mm, m |
day | dd, d |
hour | hh |
minute | mi, n |
second | ss, s |
millisecond | ms |
Catatan: MySQL hanya mendukung day sebagai satuan waktu untuk DATEDIFF().
- Tanda kutip: Selalu gunakan tanda kutip tunggal (
') untuk nilai tanggal dan waktu. - Hasil positif dan negatif: Di SQL Server, hasilnya positif ketika
enddate > startdatedan negatif sebaliknya. - Penanganan error: Jika hasil melebihi ±2.147.483.647, gunakan
DATEDIFF_BIG()di SQL Server.
Contoh DATEDIFF()
Saat bekerja dengan DATEDIFF(), hasilnya bisa berupa nilai positif atau negatif. Jika enddate lebih lambat daripada startdate, maka DATEDIFF() mengembalikan nilai positif. Jika enddate lebih awal daripada startdate, DATEDIFF() mengembalikan nilai negatif.
Contoh 1: Menemukan selisih antara dua tanggal
Di SQL Server:
SELECT DATEDIFF(year, '2022-12-31', '2024-06-01') AS years_difference;
Penjelasan: Ini menghitung selisih dalam tahun antara dua tanggal. Karena tahun 2023 dan sebagian 2024 dihitung, hasilnya adalah 1.
Di MySQL:
SELECT DATEDIFF('2024-06-01', '2022-12-31') AS days_difference;
Penjelasan: MySQL hanya mendukung selisih dalam satuan hari. Hasilnya adalah 518.
Contoh 2: Menemukan selisih antara dua timestamp
SELECT
DATEDIFF(hour, '2023-12-31 00:00:00', '2023-12-31 23:59:59') AS hours_difference,
DATEDIFF(minute, '2023-12-31 00:00:00', '2023-12-31 23:59:59') AS minutes_difference,
DATEDIFF(second, '2023-12-31 00:00:00', '2023-12-31 23:59:59') AS seconds_difference;
Penjelasan:
hours_differencemenghasilkan23karena kedua timestamp berjarak 23 jam.minutes_differencemenghasilkan1439, yaitu23 hours * 60 minutes.seconds_differencemenghasilkan86,399, yaitu1439 minutes * 60 seconds.
Contoh 3: Menemukan selisih antara dua kolom tanggal
Misalkan Anda memiliki tabel orders dengan order_date dan shipped_date. Gunakan DATEDIFF() untuk menghitung waktu pengiriman untuk setiap pesanan.
SELECT
order_id,
DATEDIFF(day, order_date, shipped_date) AS shipping_days
FROM sales.orders;
Penjelasan: Kueri menghitung jumlah hari yang dibutuhkan untuk mengirim setiap pesanan.
Contoh 4. Menemukan interval antara tanggal hari ini dan sebuah kolom
Menggunakan tabel sales.orders seperti pada Contoh 3, kita dapat menggunakan DATEDIFF() untuk menemukan interval antara tanggal hari ini dan tanggal saat pesanan dibuat.
SELECT
order_id,
order_date,
GETDATE() AS today_date,
DATEDIFF(day, order_date, GETDATE()) AS days_from_order;
Penjelasan:
GETDATE()mengambil tanggal dan waktu saat ini di SQL Server.- Selisih hari dari
order_datehingga hari ini dihitung.
Catatan Tambahan
Fungsi DATEDIFF() mengembalikan error jika hasilnya di luar jangkauan (yakni nilainya lebih besar dari +2.147.483.647 atau lebih kecil dari -2.147.483.647). Dalam kasus ini, fungsi DATEDIFF_BIG() lebih tepat digunakan.
Kesalahan Umum dan Pemecahan Masalah
Saat bekerja dengan DATEDIFF(), mudah menemui masalah terkait sintaks, urutan argumen, atau perilaku spesifik database. Di bawah ini adalah kesalahan umum dan cara menanganinya:
1. Tanda Kutip yang Salah
Masalah: Menggunakan tanda kutip pada datepart atau gaya kutip yang tidak konsisten untuk literal tanggal.
Solusi: Selalu biarkan datepart tanpa tanda kutip dan gunakan tanda kutip tunggal untuk tanggal.
-- Incorrect
SELECT DATEDIFF('year', '2023-01-01', '2024-01-01');
-- Correct
SELECT DATEDIFF(year, '2023-01-01', '2024-01-01');
2. datepart yang tidak didukung di MySQL
Masalah: DATEDIFF() di MySQL hanya mendukung selisih hari.
Solusi: Gunakan TIMESTAMPDIFF() untuk satuan yang lebih rinci seperti tahun atau bulan.
-- Correct (MySQL)
SELECT TIMESTAMPDIFF(YEAR, '2023-01-01', '2024-01-01') AS years_difference; -- Returns 1
3. Urutan Argumen Berpengaruh
Masalah: Menukar startdate dan enddate dapat menghasilkan nilai negatif yang tidak diharapkan.
Solusi: Pastikan startdate diletakkan terlebih dahulu. Gunakan ABS() jika hanya besaran nilainya yang penting.
-- Incorrect
SELECT DATEDIFF(day, '2023-01-05', '2023-01-01'); -- Returns -4
-- Correct
SELECT DATEDIFF(day, '2023-01-01', '2023-01-05'); -- Returns 4
4. Format Tanggal Spesifik Lokal
Masalah: Format tanggal yang ambigu (misalnya, MM/DD/YYYY vs. DD/MM/YYYY) dapat menyebabkan error.
Solusi: Gunakan standar ISO 8601 (YYYY-MM-DD) untuk menghindari ambiguitas.
-- Correct
SELECT DATEDIFF(day, '2023-01-01', '2023-12-31'); -- Returns 364
5. Nilai di Luar Jangkauan (SQL Server)
Masalah: Selisih yang sangat besar melebihi ±2.147.483.647 menyebabkan error overflow.Solusi: Gunakan DATEDIFF_BIG() untuk rentang yang besar.
-- Correct
SELECT DATEDIFF_BIG(day, '0001-01-01', '9999-12-31'); -- Returns 2,920,862,800
Persyaratan teknis
Berjalan di SQL Server (mulai 2008), Azure SQL Database, Azure SQL Data Warehouse, Parallel Data Warehouse
Lihat juga
Pelajari lebih lanjut tentang SQL

Sebagai data scientist di Tiktok dan mahasiswa magister di GeorgiaTech, saya memiliki hasrat mendalam terhadap data science. Saya meniti jalur karier yang unik dengan memadukan teknologi, manajemen risiko, dan perbaikan diri berkelanjutan. Selama bertugas sebagai Data Scientist di Merchant Platform, saya memitigasi risiko dan memberantas penipuan menggunakan model data yang kompleks, menghemat ribuan dolar setiap minggu. Saya mengasah keahlian dengan mendedikasikan banyak waktu untuk belajar mandiri, meraih sertifikat dari institusi terkemuka, dan menguasai topik seperti Deep Learning, TensorFlow, dan Analisis Jejaring Sosial. Di DataCamp dan berbagai platform edukasi lainnya, saya memanfaatkan pengetahuan ini untuk menginspirasi dan mendidik orang lain, membuka jalan baru di bidang data science dan membuktikan bahwa dengan tekad dan data yang tepat, setiap risiko dapat diubah menjadi peluang.

DATEDIFF()adalah salah satu fungsi manipulasi tanggal dan waktu yang paling banyak digunakan di SQL. Tutorial ini akan memandu Anda melalui cara penggunaan, sintaks, dan perbedaan kunci di berbagai dialek SQL populer, sehingga Anda dapat menguasai fungsi yang kuat ini.Apa itu fungsi DATEDIFF()?
Fungsi
DATEDIFF()menghitung selisih antara dua nilai tanggal atau timestamp dan mengembalikan hasilnya dalam satuan tertentu, seperti hari, bulan, atau tahun.Sintaks DATEDIFF di Berbagai Dialek SQL
Sintaks
DATEDIFF()berbeda pada tiap dialek SQL. Di bawah ini adalah contoh untuk database yang umum digunakan:Parameter
Apa itu?
datepartParameter wajib. Ini adalah satuan di mana
DATEDIFF()melaporkan selisih antarastartdatedanenddate. Lihat bagian berikut untuk jenis nilai yang dapat digunakan.startdateParameter wajib yang menyatakan nilai datetime yang menandai tanggal mulai.
enddateParameter wajib yang menyatakan nilai datetime yang menandai tanggal akhir.