datepart sözdizimi
datepart parametresi, farkın hangi zaman biriminde hesaplanacağını tanımlar. SQL Server aşağıdaki datepart değerlerini destekler:
| Datepart | Diğer adlar |
|---|---|
year | yy, yyyy |
quarter | qq, q |
month | mm, m |
day | dd, d |
hour | hh |
minute | mi, n |
second | ss, s |
millisecond | ms |
Not: MySQL, DATEDIFF() için zaman birimi olarak yalnızca day'i destekler.
- Tırnak işaretleri: Tarih ve saat değerleri için her zaman tek tırnak (
') kullanın. - Pozitif ve negatif sonuçlar: SQL Server'da,
enddate > startdateolduğunda sonuç pozitiftir; aksi halde negatiftir. - Hata yönetimi: Sonuç ±2.147.483.647'yi aşarsa, SQL Server'da
DATEDIFF_BIG()kullanın.
DATEDIFF() örnekleri
DATEDIFF() ile çalışırken sonuçlar pozitif veya negatif olabilir. enddate, startdate'den sonra ise DATEDIFF() pozitif değer döndürür. enddate, startdate'den önce ise DATEDIFF() negatif değer döndürür.
Örnek 1: İki tarih arasındaki farkı bulun
SQL Server'da:
SELECT DATEDIFF(year, '2022-12-31', '2024-06-01') AS years_difference;
Açıklama: Bu, iki tarih arasındaki yıl farkını hesaplar. 2023 yılı ve 2024'ün bir kısmı sayıldığından sonuç 1 olur.
MySQL'de:
SELECT DATEDIFF('2024-06-01', '2022-12-31') AS days_difference;
Açıklama: MySQL yalnızca gün farklarını destekler. Sonuç 518'dir.
Örnek 2: İki zaman damgası arasındaki farkı bulun
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;
Açıklama:
hours_difference23döndürür çünkü iki zaman damgası arasında 23 saat vardır.minutes_difference1439döndürür; bu,23 saat * 60 dakika'dır.seconds_difference86.399döndürür; bu,1439 dakika * 60 saniye'dir.
Örnek 3: İki tarih sütunu arasındaki farkı bulun
order_date ve shipped_date sütunlarına sahip bir orders tablonuz olduğunu varsayalım. Her sipariş için gönderim süresini hesaplamak üzere DATEDIFF() kullanın.
SELECT
order_id,
DATEDIFF(day, order_date, shipped_date) AS shipping_days
FROM sales.orders;
Açıklama: Sorgu, her siparişin kaç günde gönderildiğini hesaplar.
Örnek 4. Bugünün tarihi ile bir sütun arasındaki aralığı bulun
Örnek 3'teki gibi sales.orders tablosunu kullanarak, DATEDIFF() ile bugünün tarihi ile siparişin verildiği tarih arasındaki farkı bulabiliriz.
SELECT
order_id,
order_date,
GETDATE() AS today_date,
DATEDIFF(day, order_date, GETDATE()) AS days_from_order;
Açıklama:
GETDATE(), SQL Server'da geçerli tarih ve saati getirir.order_date'ten bugüne gün cinsinden fark hesaplanır.
Ek notlar
DATEDIFF() fonksiyonu, sonuç aralık dışındaysa (yani değer +2.147.483.647'den büyük veya -2.147.483.647'den küçükse) hata döndürür. Bu durumda DATEDIFF_BIG() işlevi uygundur.
Yaygın hatalar ve sorun giderme
DATEDIFF() ile çalışırken sözdizimi, argüman sırası veya veritabanına özgü davranışlarla ilgili sorunlar yaşamak kolaydır. Aşağıda yaygın hatalar ve bunların nasıl ele alınacağı yer alır:
1. Yanlış tırnak işaretleri
Sorun: datepart etrafında tırnak kullanmak veya tarih sabitleri için tutarsız tırnak stilleri.
Çözüm: datepart'i her zaman tırnaksız bırakın ve tarihler için tek tırnak kullanın.
-- Incorrect
SELECT DATEDIFF('year', '2023-01-01', '2024-01-01');
-- Correct
SELECT DATEDIFF(year, '2023-01-01', '2024-01-01');
2. MySQL'de desteklenmeyen datepart
Sorun: MySQL'in DATEDIFF() işlevi yalnızca gün farklarını destekler.
Çözüm: Yıl veya ay gibi daha ayrıntılı birimler için TIMESTAMPDIFF() kullanın.
-- Correct (MySQL)
SELECT TIMESTAMPDIFF(YEAR, '2023-01-01', '2024-01-01') AS years_difference; -- Returns 1
3. Argüman sırası önemlidir
Sorun: startdate ve enddate'in yerini değiştirmek beklenmedik negatif sonuçlara yol açabilir.
Çözüm: startdate'in önce geldiğinden emin olun. Yalnızca büyüklük önemliyse ABS() kullanın.
-- 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. Yerel ayara özgü tarih biçimleri
Sorun: Belirsiz tarih biçimleri (örn. MM/DD/YYYY ile DD/MM/YYYY) hatalara neden olabilir.
Çözüm: Belirsizliği önlemek için ISO 8601 standardını (YYYY-MM-DD) kullanın.
-- Correct
SELECT DATEDIFF(day, '2023-01-01', '2023-12-31'); -- Returns 364
5. Aralık dışı değerler (SQL Server)
Sorun: ±2.147.483.647'yi aşan büyük farklar taşma hatasına neden olur.Çözüm: Geniş aralıklar için DATEDIFF_BIG() kullanın.
-- Correct
SELECT DATEDIFF_BIG(day, '0001-01-01', '9999-12-31'); -- Returns 2,920,862,800
Teknik gereksinimler
SQL Server (2008'den itibaren), Azure SQL Database, Azure SQL Data Warehouse, Parallel Data Warehouse'da çalışır
Ayrıca bakınız
SQL hakkında daha fazla bilgi edinin

Tiktok'ta veri bilimci ve GeorgiaTech'te yüksek lisans öğrencisi olarak, veri bilimine doğuştan bir tutkuyla bağlıyım; teknoloji, risk ve sürekli öz gelişimi birleştiren özgün bir kariyer yolu oluşturdum. Merchant Platform'da Veri Bilimci olarak görev yaptığım dönemde, karmaşık veri modelleriyle riskleri azaltıp sahtekarlıkla mücadele ederek haftalık olarak binlerce dolar tasarruf sağladım. Kendi kendime öğrenmeye sayısız saat ayırarak, saygın kurumlardan sertifikalar alarak ve Derin Öğrenme, TensorFlow ve Sosyal Ağ Analizi gibi konularda yetkinlik kazanarak yeteneğimi geliştirdim. DataCamp ve diğer eğitim platformlarında bu bilgi birikimini başkalarına ilham vermek ve onları eğitmek için kullanıyor, veri bilimi alanında yeni yollar açıyor ve azim ile doğru verinin birleştiğinde her riskin bir fırsata dönüştürülebileceğini gösteriyorum.

DATEDIFF(), SQL'de en yaygın kullanılan tarih ve saat işleme işlevlerinden biridir. Bu eğitim, bu güçlü işlevi ustalıkla kullanabilmeniz için kullanımını, sözdizimini ve popüler SQL lehçeleri arasındaki temel farklılıkları adım adım anlatır.DATEDIFF() fonksiyonu nedir?
DATEDIFF()fonksiyonu, iki tarih veya zaman damgası değeri arasındaki farkı hesaplar ve sonucu gün, ay veya yıl gibi belirtilen bir birimde döndürür.SQL lehçelerinde DATEDIFF sözdizimi
DATEDIFF()için sözdizimi SQL lehçelerine göre değişir. Aşağıda yaygın olarak kullanılan veritabanları için örnekler yer alır:Parametre
Nedir?
datepartZorunlu bir parametre. Bu,
startdateveenddatearasındaki farkınDATEDIFF()tarafından hangi birimde raporlanacağını belirtir. Alabileceği farklı değerler için bir sonraki bölüme bakın.startdateBaşlangıç tarihini belirten bir tarih-saat değerini ifade eden zorunlu bir parametre.
enddateBitiş tarihini belirten bir tarih-saat değerini ifade eden zorunlu bir parametre.