CAST, CONVERT ve TRY_ ailesi
SELECT CAST('123' AS INT) + 1 AS sayi,
TRY_CAST('abc' AS INT) AS gecersiz_sayi,
TRY_CONVERT(DATE, '2024-02-30') AS gecersiz_tarih,
CONVERT(DATE, '2024-02-28') AS tarih,
CAST(19.99 AS DECIMAL(10, 1)) AS yuvarlanmis;
CAST başarısız olursa sorgu hata verir; TRY_CAST / TRY_CONVERT ise NULL döner. Kirli veriyi temizlerken hayat kurtarır.
SELECT CAST('abc' AS INT) AS sonuc;
IIF ve CHOOSE
SELECT TOP 8 name, stock,
IIF(stock = 0, N'Tükendi', IIF(stock < 20, N'Az', N'Var')) AS durum
FROM products
ORDER BY stock;
SELECT CHOOSE(DATEPART(quarter, order_date), 'Q1', 'Q2', 'Q3', 'Q4') AS ceyrek,
COUNT(*) AS siparis
FROM orders
WHERE YEAR(order_date) = 2024
GROUP BY DATEPART(quarter, order_date)
ORDER BY DATEPART(quarter, order_date);
ISNULL ile COALESCE farkı
ISNULL(a, b) | COALESCE(a, b, c, ...) | |
|---|---|---|
| Argüman sayısı | 2 | Sınırsız |
| Sonuç tipi | İlk argümanın tipi (uzun değer kırpılabilir) | En yüksek öncelikli tip |
| Standart | SQL Server'a özgü | ANSI standardı |
Örneğin ISNULL(CAST(NULL AS VARCHAR(3)), 'Bilinmiyor') sonucu 'Bil' olur; COALESCE ise 'Bilinmiyor' döner.
Örtük dönüşüm ve tip önceliğiSQL Server farklı tipleri karşılaştırırken düşük öncelikli tipi yüksek olana çevirir (ör. VARCHAR → INT).
WHERE musteri_no = 123 sorgusunda musteri_no VARCHAR ise her satır sayıya çevrilir: hem indeks kullanılamaz hem de sayıya çevrilemeyen bir değer sorguyu patlatır.