Lewati ke konten utama

FUNGSI SQL DATEDIFF()

DATEDIFF() adalah salah satu fungsi manipulasi data tanggal yang paling banyak digunakan di SQL. Kuasai dengan membaca tutorial ini.
· 3 mnt Baca

Jelajahi bersama AI

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:

 

Berikut adalah artikel yang telah sepenuhnya diperbarui dan dipoles dengan semua peningkatan yang diminta:


Fungsi SQL DATEDIFF()

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:

SQL Server

DATEDIFF(datepart, startdate, enddate)
  • datepart: Satuan waktu (misalnya year, month, day).
  • startdate dan enddate: Tanggal atau timestamp yang dibandingkan. Hasil dihitung sebagai enddate - startdate.

MySQL

DATEDIFF(enddate, startdate)
  • Mengembalikan selisih dalam satuan hari saja.

PostgreSQL

PostgreSQL tidak memiliki fungsi DATEDIFF() tetapi menyediakan fungsi serupa melalui:

  • Fungsi AGE():
SELECT AGE(enddate, startdate);
  • Pengurangan langsung nilai tanggal:
SELECT enddate - startdate;

Parameter

Apa itu?

datepart

Parameter wajib. Ini adalah satuan di mana DATEDIFF() melaporkan selisih antara startdate dan enddate. Lihat bagian berikut untuk jenis nilai yang dapat digunakan. 

startdate

Parameter wajib yang menyatakan nilai datetime yang menandai tanggal mulai. 

enddate

Parameter wajib yang menyatakan nilai datetime yang menandai tanggal akhir. 

datepart syntax 

Parameter datepart mendefinisikan satuan waktu untuk menghitung selisih. SQL Server mendukung nilai datepart berikut:

DatepartAlias
yearyy, yyyy
quarterqq, q
monthmm, m
daydd, d
hourhh
minutemi, n
secondss, s
millisecondms

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 > startdate dan 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_difference menghasilkan 23 karena kedua timestamp berjarak 23 jam.
  • minutes_difference menghasilkan 1439, yaitu 23 hours * 60 minutes.
  • seconds_difference menghasilkan 86,399, yaitu 1439 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_date hingga 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

Travis Tang

Penulis

Travis Tang

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.

Topik

Terkait

blogs

Tutorial Korelasi di R

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

blogs

Spaghetti Plot dan Jalur Badai