Scalaire functies gebruiken
Scalaire functies retourneren één waarde en werken meestal aan één rij gegevens. Het aantal invoerwaarden dat ze nemen, kan nul zijn (bijvoorbeeld GETDATE), één (bijvoorbeeld UPPER) of meerdere (bijvoorbeeld AFRONDEN). Omdat scalaire functies altijd één waarde retourneren, kunnen ze overal worden gebruikt waar één waarde (het resultaat) nodig is. Ze worden meestal gebruikt in SELECT-componenten en WHERE-componentpredicaten. Ze kunnen ook worden gebruikt in de SET-component van een UPDATE-instructie.
Ingebouwde scalaire functies kunnen worden ingedeeld in veel categorieën, zoals tekenreeks, conversie, logisch, wiskundig en andere. In deze module worden enkele algemene scalaire functies besproken.
Enkele overwegingen bij het gebruik van scalaire functies zijn:
- Determinisme: Als de functie dezelfde waarde retourneert voor dezelfde invoer- en databasestatus telkens wanneer deze wordt aangeroepen, zeggen we dat deze deterministisch is. Round(1.1, 0) retourneert bijvoorbeeld altijd de waarde 1,0. Veel ingebouwde functies zijn niet-deterministisch. MET GETDATE() wordt bijvoorbeeld de huidige datum en tijd geretourneerd. Resultaten van niet-deterministische functies kunnen niet worden geïndexeerd, wat van invloed is op de mogelijkheid van de queryprocessor om een goed plan te bedenken voor het uitvoeren van de query.
- Sortering: Wanneer u functies gebruikt waarmee tekengegevens worden bewerkt, welke sortering wordt gebruikt? Sommige functies gebruiken de sortering (sorteervolgorde) van de invoerwaarde; andere gebruiken de sortering van de database als er geen invoersortering wordt opgegeven.
Voorbeelden van scalaire functies
Op het moment van schrijven bevat de technische documentatie van SQL Server meer dan 200 scalaire functies die meerdere categorieën omvatten, waaronder:
- Configuratiefuncties
- Conversiefuncties
- Cursorfuncties
- De functies Date en Time
- Wiskundige functies
- Metagegevensfuncties
- Beveiligingsfuncties
- Tekenreeksfuncties
- Systeemfuncties
- Statistische functies van het systeem
- Tekst- en afbeeldingsfuncties
Er is onvoldoende tijd in deze cursus om elke functie te beschrijven, maar in de onderstaande voorbeelden ziet u enkele veelgebruikte functies.
In het volgende hypothetische voorbeeld worden verschillende datum- en tijdfuncties gebruikt:
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;
Gedeeltelijke resultaten worden hieronder weergegeven:
VerkooporderID
Besteldatum
Besteljaar
OrderMaand
Besteldag
OrderWeekDay
JarenSindsBestelling
71774
2008-06-01T00:00:00
2008
Juni
1
Zondag
13
...
...
...
...
...
...
...
Het volgende voorbeeld bevat enkele wiskundige functies:
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;
Gedeeltelijke resultaten:
TaxAmt
Afgeronde
Etage
Plafond
Kwadraat
Hoofdniveau
Logboek
Gerandomiseerde
70.4279
70.0000
70.0000
71.0000
4960.089098
8.392133221
4.254589491
28.64120429
...
..
...
...
...
...
...
...
In het volgende voorbeeld worden enkele tekenreeksfuncties gebruikt:
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;
Gedeeltelijke resultaten:
Bedrijfsnaam
Hoofdletters
Onderkast
Lengte
Omgekeerd
FirstSpace
EersteWoord
RestOfName
Een fietswinkel
EEN FIETSWINKEL
een fietswinkel
12
erotS ekiB A
2
Een
Fietswinkel
Progressieve sporten
PROGRESSIEVE SPORTEN
progressieve sporten
18
stropS evissergorP
12
Progressief
Sport
Geavanceerde fietsonderdelen
GEAVANCEERDE FIETSONDERDELEN
geavanceerde fietsonderdelen
24
stnenopmoC ekiB decnavdA
9
Geavanceerd
Fietsonderdelen
...
...
...
...
...
...
...
...
Logische functies
Met een andere functiecategorie kunt u bepalen welke van de verschillende waarden moet worden geretourneerd. Logische functies evalueren een invoerexpressie en retourneren een geschikte waarde op basis van het resultaat.
IIF
De functie IIF evalueert een Booleaanse invoerexpressie en retourneert een opgegeven waarde als de expressie Waar oplevert en een alternatieve waarde als de expressie onwaar oplevert.
Denk bijvoorbeeld aan de volgende query, waarmee het adrestype van een klant wordt geëvalueerd. Als de waarde 'Hoofdkantoor' is, retourneert de expressie 'Facturering'. Voor alle andere adrestypewaarden retourneert de expressie Mailing.
SELECT AddressType,
IIF(AddressType = 'Main Office', 'Billing', 'Mailing') AS UseAddressFor
FROM Sales.CustomerAddress;
De gedeeltelijke resultaten van deze query kunnen er als volgt uitzien:
AdresType
GebruikAdresVoor
Hoofdkantoor
Facturatie
Verzenden
Mailing
...
...
KIEZEN
De functie CHOOSE evalueert een geheel getalexpressie en retourneert de bijbehorende waarde uit een lijst op basis van de rangschikking (1).
SELECT SalesOrderID, Status,
CHOOSE(Status, 'Ordered', 'Shipped', 'Delivered') AS OrderStatus
FROM Sales.SalesOrderHeader;
De resultaten van deze query kunnen er ongeveer als volgt uitzien:
VerkooporderID
Toestand
Bestelstatus
1234
3
Afgeleverd
1235
2
Verzonden
1236
2
Verzonden
1237
1
Besteld
...
...
...