Skaláris függvények használata
A skaláris függvények egyetlen értéket adnak vissza, és általában egyetlen adatsoron működnek. Az általuk vett bemeneti értékek száma lehet nulla (például GETDATE), egy (például FELSŐ) vagy több (például KEREK). Mivel a skaláris függvények mindig egyetlen értéket adnak vissza, bárhol használhatók, ahol egyetlen értékre (az eredményre) van szükség. Ezeket leggyakrabban a SELECT záradékokban és a WHERE záradék predikátumaiban használják. Az UPDATE utasítás SET záradékában is használhatók.
A beépített skaláris függvények számos kategóriába sorolhatók, például sztringek, konvertálás, logikai, matematikai és egyéb kategóriákba. Ez a modul néhány gyakori skaláris függvényt fog áttekinteni.
A skaláris függvények használatakor megfontolandó szempontok a következők:
- Determinizmus: Ha a függvény minden híváskor ugyanazt az értéket adja vissza ugyanahhoz a bemenethez és adatbázisállapothoz, azt mondjuk, hogy determinisztikus. A KEREKÍTÉS(1.1, 0) például mindig az 1,0 értéket adja vissza. Számos beépített függvény nemdeterminista. A GETDATE() például az aktuális dátumot és időt adja vissza. A nemdeterminisztikus függvények eredményei nem indexelhetők, ami befolyásolja a lekérdezésfeldolgozó azon képességét, hogy megfelelő tervet találjon a lekérdezés végrehajtásához.
- Rendezés: A karakteradatokat kezelő függvények használatakor melyik rendezést fogja használni? Egyes függvények a bemeneti érték rendezési sorrendjét használják; mások akkor használják az adatbázis rendezést, ha nincs megadva bemeneti rendezés.
Skaláris függvények példái
Az íráskor az SQL Server műszaki dokumentációja több mint 200 olyan skaláris függvényt sorolt fel, amelyek több kategóriára is kiterjednek, többek között a következőkre:
- Konfigurációs függvények
- Konverziós függvények
- Kurzorfüggvények
- Dátum- és időfüggvények
- Matematikai függvények
- Metaadat-függvények
- Biztonsági függvények
- Sztringfüggvények
- Rendszerfüggvények
- Rendszerstatisztikai függvények
- Szöveg- és képfüggvények
Ebben a kurzusban nincs elég idő az egyes függvények leírására, de az alábbi példák néhány gyakran használt függvényt mutatnak be.
Az alábbi hipotetikus példa több dátum- és időfüggvényt használ:
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;
A részleges eredmények az alábbiakban láthatók:
SalesOrderID
OrderDate
OrderYear
OrderMonth
OrderDay
OrderWeekDay
YearsSinceOrder
71774
2008-06-01T00:00:00
2008
Június
0
Vasárnap
13
...
...
...
...
...
...
...
A következő példa néhány matematikai függvényt tartalmaz:
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;
Részleges eredmények:
TaxAmt
Kerekített
Floor
Ceiling
Négyzet
Gyökér
Napló
Randomizált
70.4279
70.0000
70.0000
71.0000
4960.089098
8.392133221
4.254589491
28.64120429
...
..
...
...
...
...
...
...
Az alábbi példa néhány sztringfüggvényt használ:
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;
Részleges eredmények:
CompanyName
Nagybetűs
Kisbetűs
Hossz
Reversed
FirstSpace
FirstWord
RestOfName
Kerékpáráruház
KERÉKPÁRÁRUHÁZ
kerékpáráruház
12
erotS ekiB A
2
A
Bike Store
Progresszív sportok
PROGRESSZÍV SPORTOK
progresszív sportok
18
stropS evissergorP
12
Progresszív
Sport
Speciális kerékpárösszetevők
SPECIÁLIS KERÉKPÁRÖSSZETEVŐK
speciális kerékpárösszetevők
24
stnenopmoC ekiB decnavdA
9
Speciális
Kerékpárösszetevők
...
...
...
...
...
...
...
...
Logikai függvények
A függvények egy másik kategóriája lehetővé teszi több érték visszaadásának meghatározását. A logikai függvények kiértékelnek egy bemeneti kifejezést, és az eredmény alapján visszaadják a megfelelő értéket.
IIF
Az IIF függvény kiértékel egy logikai bemeneti kifejezést, és egy megadott értéket ad vissza, ha a kifejezés igaz értéket ad vissza, és egy másik értéket, ha a kifejezés hamis értéket ad vissza.
Vegyük például az alábbi lekérdezést, amely kiértékeli az ügyfél címtípusát. Ha az érték "Főiroda", a kifejezés a "Számlázás" értéket adja vissza. Az összes többi címtípus-érték esetében a kifejezés a "Levelezés" értéket adja vissza.
SELECT AddressType,
IIF(AddressType = 'Main Office', 'Billing', 'Mailing') AS UseAddressFor
FROM Sales.CustomerAddress;
A lekérdezés részleges eredményei a következőképpen nézhetnek ki:
AddressType
UseAddressFor
Főiroda
Számlázás
Szállítás
Levelezési
...
...
VÁLASZT
A CHOOSE függvény kiértékel egy egész számot, és visszaadja a megfelelő értéket egy listából az (1-alapú) sorszám alapján.
SELECT SalesOrderID, Status,
CHOOSE(Status, 'Ordered', 'Shipped', 'Delivered') AS OrderStatus
FROM Sales.SalesOrderHeader;
A lekérdezés eredményei a következőképpen nézhetnek ki:
SalesOrderID
Állapot
OrderStatus
1234
3
Kézbesítve
1235
2
Szállított
1236
2
Szállított
1237
0
Megrendelve
...
...
...