Ana içeriğe geç

DATEDIFF() SQL FONKSİYONU

DATEDIFF(), SQL'de en yaygın kullanılan tarih veri işleme işlevlerinden biridir. Bu eğitimi okuyarak ustalaşın.
· 3 dk. oku

Yapay Zeka ile Keşfedin

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:

 

İşte tüm istenen iyileştirmelerle tamamen güncellenmiş ve cilalanmış makale:


DATEDIFF() SQL Function

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.


What is the DATEDIFF() Function?

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:

SQL Server

DATEDIFF(datepart, startdate, enddate)
  • datepart: Zaman birimi (ör. year, month, day).
  • startdate ve enddate: Karşılaştırılacak tarih veya zaman damgaları. Sonuç enddate - startdate olarak hesaplanır.

MySQL

DATEDIFF(enddate, startdate)
  • Yalnızca gün cinsinden fark döndürür.

PostgreSQL

PostgreSQL'de DATEDIFF() işlevi yoktur ancak benzer işlevsellik şu yollarla sağlanır:

  • AGE() işlevi:
SELECT AGE(enddate, startdate);
  • Tarih değerlerinin doğrudan çıkarılması:
SELECT enddate - startdate;

Parametre

Nedir?

datepart

Zorunlu bir parametre. Bu, startdate ve enddate arasındaki farkın DATEDIFF() tarafından hangi birimde raporlanacağını belirtir. Alabileceği farklı değerler için bir sonraki bölüme bakın. 

startdate

Başlangıç tarihini belirten bir tarih-saat değerini ifade eden zorunlu bir parametre. 

enddate

Bitiş tarihini belirten bir tarih-saat değerini ifade eden zorunlu bir parametre. 

datepart sözdizimi 

datepart parametresi, farkın hangi zaman biriminde hesaplanacağını tanımlar. SQL Server aşağıdaki datepart değerlerini destekler:

DatepartDiğer adlar
yearyy, yyyy
quarterqq, q
monthmm, m
daydd, d
hourhh
minutemi, n
secondss, s
millisecondms

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 > startdate olduğ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_difference 23 döndürür çünkü iki zaman damgası arasında 23 saat vardır.
  • minutes_difference 1439 döndürür; bu, 23 saat * 60 dakika'dır.
  • seconds_difference 86.399 dö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

Travis Tang

Yazar

Travis Tang

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.

Konular

İlgili