Ana içeriğe geç
Kesit SQL
Temel · Fonksiyonlar

Tarih ve saat fonksiyonları

Yıl/ay çıkarmak, tarih farkı ve tarih aritmetiği; SQL türleri arası en büyük fark burada.

Uygulamada aç, 7 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

Analistin en çok kullandığı fonksiyonlar

Satış trendleri, kohortlar, büyüme oranları… hepsi tarihle başlar. Tarih fonksiyonları SQL türleri arasında en çok fark gösteren alandır. Aşağıdaki her kod kutusunda SQL türü sekmesini değiştirerek aynı işin nasıl yazıldığını gör.

Yıl, ay, gün parçaları

İşlemSQL ServerPostgreSQL / OracleMySQLSQLite
YılYEAR(d)EXTRACT(YEAR FROM d)YEAR(d)strftime('%Y', d)
Ay (sayı)MONTH(d)EXTRACT(MONTH FROM d)MONTH(d)strftime('%m', d)
“2024-05” biçimiFORMAT(d, 'yyyy-MM')TO_CHAR(d, 'YYYY-MM')DATE_FORMAT(d, '%Y-%m')strftime('%Y-%m', d)
Haftanın günüDATEPART(weekday, d)EXTRACT(DOW FROM d) / TO_CHAR(d,'D')DAYOFWEEK(d)strftime('%w', d)
BugünGETDATE()CURRENT_DATE / SYSDATECURDATE()date('now')
SELECT strftime('%Y-%m', order_date) AS ay,
       COUNT(*) AS siparis
FROM orders
GROUP BY strftime('%Y-%m', order_date)
ORDER BY ay;

Tarih aritmetiği

İşlemSQL ServerPostgreSQLMySQLOracle
7 gün ekleDATEADD(day, 7, d)d + INTERVAL '7 day'DATE_ADD(d, INTERVAL 7 DAY)d + 7
1 ay ekleDATEADD(month, 1, d)d + INTERVAL '1 month'DATE_ADD(d, INTERVAL 1 MONTH)ADD_MONTHS(d, 1)
Ayın ilk günüDATEFROMPARTS(YEAR(d), MONTH(d), 1)DATE_TRUNC('month', d)DATE_FORMAT(d, '%Y-%m-01')TRUNC(d, 'MM')
Gün farkıDATEDIFF(day, d1, d2)d2 - d1DATEDIFF(d2, d1)d2 - d1
SELECT date('2024-01-15', '+1 month') AS bir_ay_sonra,
       date('2024-03-15', 'start of month') AS ay_basi,
       date('2024-03-15', '-7 days') AS bir_hafta_once,
       julianday('2024-12-31') - julianday('2024-01-01') AS gun_farki;
Ay sonu tuzağı31 Ocak'a 1 ay eklemek: SQL Server, PostgreSQL, MySQL ve Oracle 2024-02-29 (ayın son günü) verir; SQLite ise taşmayı sonraki aya aktarır ve 2024-03-02 verir. Ay sonu tarihleriyle çalışırken SQL türünün davranışını mutlaka test et.
SQL Server'da DATEDIFFDATEDIFF(month, '2024-01-31', '2024-02-01') sonucu 1'dir; çünkü DATEDIFF geçen tam süreyi değil, aşılan sınır sayısını sayar. Yaş hesaplarken bu fark önemlidir.

Çalışanların işe girişinden bu yana geçen gün:

SELECT first_name, hire_date,
       CAST(julianday('2025-01-01') - julianday(hire_date) AS INTEGER) AS gun
FROM employees
ORDER BY gun DESC
LIMIT 5;
Alıştırmalara geç (7)