Skaler işlevleri kullanma
Skaler işlevler tek bir değer döndürür ve genellikle tek bir veri satırı üzerinde çalışır. Aldıkları giriş değerlerinin sayısı sıfır (örneğin, GETDATE), bir (örneğin, BÜYÜKHARF) veya birden çok (örneğin, YUVARLA) olabilir. Skaler işlevler her zaman tek bir değer döndürdiğinden, tek bir değerin (sonuç) gerekli olduğu her yerde kullanılabilir. Bunlar en yaygın olarak SELECT yan tümcelerinde ve WHERE yan tümcesi koşullarında kullanılır. Bunlar bir UPDATE deyiminin SET yan tümcesinde de kullanılabilir.
Yerleşik skaler işlevler dize, dönüştürme, mantıksal, matematiksel ve diğerleri gibi birçok kategoride düzenlenebilir. Bu modülde birkaç yaygın skaler işleve bakılacaktır.
Skaler işlevleri kullanırken dikkat edilmesi gereken bazı noktalar şunlardır:
- Determinizm: İşlev her çağrıldığında aynı giriş ve veritabanı durumu için aynı değeri döndürürse, belirleyici olduğunu söyleriz. Örneğin, YUVARLA(1.1, 0) her zaman 1.0 değerini döndürür. Birçok yerleşik işlev belirsiz değildir. Örneğin, GETDATE() geçerli tarih ve saati döndürür. Belirsiz olmayan işlevlerden elde edilen sonuçlar dizine alınamaz ve bu da sorgu işlemcisinin sorguyu yürütmek için iyi bir plan oluşturma becerisini etkiler.
- Harmanlama: Karakter verilerini işleyen işlevler kullanılırken hangi harmanlama kullanılacak? Bazı işlevler giriş değerinin harmanlamasını (sıralama düzeni) kullanır; diğerleri, giriş harmanlaması sağlanmazsa veritabanının harmanlamasını kullanır.
Skaler işlev örnekleri
Yazma sırasında, SQL Server Teknik Belgeleri aşağıdakiler dahil olmak üzere birden çok kategoriye yayılan 200'den fazla skaler işlev listeledi:
- Yapılandırma işlevleri
- Dönüştürme işlevleri
- İmleç işlevleri
- Date ve Time işlevleri
- Matematiksel işlevler
- Meta veri işlevleri
- Güvenlik işlevleri
- Dize işlevleri
- Sistem işlevleri
- Sistem İstatistiksel işlevleri
- Metin ve Görüntü işlevleri
Bu kursta her işlevi açıklamak için yeterli zaman yoktur, ancak aşağıdaki örneklerde yaygın olarak kullanılan bazı işlevler gösterilmektedir.
Aşağıdaki varsayımsal örnek birkaç tarih ve saat işlevini kullanır:
SELECT SalesOrderID,
OrderDate,
YEAR(OrderDate) AS OrderYear,
DATENAME(mm, OrderDate) AS OrderMonth,
DAY(OrderDate) AS OrderDay,
DATENAME(dw, OrderDate) AS OrderWeekDay,
DATEDIFF(yy,OrderDate, GETDATE()) AS YearsSinceOrder
FROM Sales.SalesOrderHeader;
Kısmi sonuçlar aşağıda gösterilmiştir:
SalesOrderID
OrderDate
OrderYear
OrderMonth
OrderDay
OrderWeekDay
YearsSinceOrder
71774
2008-06-01T00:00:00
2008
Haziran
1
Pazar
13
...
...
...
...
...
...
...
Sonraki örnekte bazı matematiksel işlevler yer alır:
SELECT TaxAmt,
ROUND(TaxAmt, 0) AS Rounded,
FLOOR(TaxAmt) AS Floor,
CEILING(TaxAmt) AS Ceiling,
SQUARE(TaxAmt) AS Squared,
SQRT(TaxAmt) AS Root,
LOG(TaxAmt) AS Log,
TaxAmt * RAND() AS Randomized
FROM Sales.SalesOrderHeader;
Kısmi sonuçlar:
TaxAmt
Yuvarlak
Kat
Üst
Kare
Kök
Günlük
Randomize
70.4279
70.0000
70.0000
71.0000
4960.089098
8.392133221
4.254589491
28.64120429
...
..
...
...
...
...
...
...
Aşağıdaki örnek bazı dize işlevlerini kullanır:
SELECT CompanyName,
UPPER(CompanyName) AS UpperCase,
LOWER(CompanyName) AS LowerCase,
LEN(CompanyName) AS Length,
REVERSE(CompanyName) AS Reversed,
CHARINDEX(' ', CompanyName) AS FirstSpace,
LEFT(CompanyName, CHARINDEX(' ', CompanyName)) AS FirstWord,
SUBSTRING(CompanyName, CHARINDEX(' ', CompanyName) + 1, LEN(CompanyName)) AS RestOfName
FROM Sales.Customer;
Kısmi sonuçlar:
CompanyName
Büyük
Küçük
Uzunluk
Reversed
FirstSpace
FirstWord
RestOfName
Bisiklet Mağazası
BISIKLET MAĞAZASı
bisiklet mağazası
12
erotS ekib A
2
A
Bisiklet Mağazası
Progresif Sporlar
PROGRESİF SPORLAR
ilerici sporlar
18
stropS evissergorP
12
Progressive
Spor
Gelişmiş Bisiklet Bileşenleri
GELIŞMIŞ BISIKLET BILEŞENLERI
gelişmiş bisiklet bileşenleri
24
stnenopmoC ekiB decnavdA
9
Gelişmiş
Bisiklet Bileşenleri
...
...
...
...
...
...
...
...
Mantıksal işlevler
Başka bir işlev kategorisi, birkaç değerden hangisinin döndürüleceğini belirlemeye olanak tanır. Mantıksal işlevler bir giriş ifadesini değerlendirir ve sonucu temel alarak uygun bir değer döndürür.
IIF
IIF işlevi bir Boole giriş ifadesini değerlendirir ve ifade True olarak değerlendirilirse belirtilen değeri ve ifade False olarak değerlendirilirse alternatif bir değer döndürür.
Örneğin, bir müşterinin adres türünü değerlendiren aşağıdaki sorguyu göz önünde bulundurun. Değer "Ana Office" ise, ifade "Faturalama" döndürür. Diğer tüm adres türü değerleri için ifade "Postalama" döndürür.
SELECT AddressType,
IIF(AddressType = 'Main Office', 'Billing', 'Mailing') AS UseAddressFor
FROM Sales.CustomerAddress;
Bu sorgunun kısmi sonuçları aşağıdaki gibi görünebilir:
AddressType
UseAddressFor
Ana Ofis
Faturalama
Sevkiyat
Posta
...
...
SEÇİN
CHOOSE işlevi bir tamsayı ifadesini değerlendirir ve (1 tabanlı) sıralı konumuna göre bir listeden karşılık gelen değeri döndürür.
SELECT SalesOrderID, Status,
CHOOSE(Status, 'Ordered', 'Shipped', 'Delivered') AS OrderStatus
FROM Sales.SalesOrderHeader;
Bu sorgunun sonuçları şuna benzer olabilir:
SalesOrderID
Durum
OrderStatus
1234
3
Teslim edildi
1235
2
Sevk Edildi
1236
2
Sevk Edildi
1237
1
Sipariş edilen
...
...
...