Verwenden von Skalarfunktionen
Skalarfunktionen geben einen einzelnen Wert zurück und arbeiten in der Regel mit einer einzelnen Datenzeile. Die Anzahl der Eingabewerte, die sie annehmen können, kann null (z. B. GETDATE)oder ein Wert (z. B. UPPER) sein. Auch mehrere Werte (z. B. ROUND) sind möglich. Da Skalarfunktionen immer einen einzelnen Wert zurückgeben, können sie überall dort verwendet werden, wo ein einzelner Wert (das Ergebnis) benötigt wird. Sie werden am häufigsten in SELECT-Klauseln und Prädikaten von WHERE-Klauseln verwendet. Sie können auch in der SET-Klausel einer UPDATE-Anweisung verwendet werden.
Integrierte Skalarfunktionen können in viele Kategorien unterteilt werden, z. B. Zeichenfolgen, Konvertierungen, logische, mathematische und andere Funktionen. In diesem Modul werden einige allgemeine Skalarfunktionen vorgestellt.
Einige Überlegungen bei der Verwendung von Skalarfunktionen sind:
- Determinismus: Wenn die Funktion bei jedem Aufruf den gleichen Wert für denselben Eingabe- und Datenbankzustand zurückgibt, wird sie als deterministisch bezeichnet. Beispielsweise gibt ROUND(1.1, 0) immer den Wert 1.0 zurück. Viele integrierte Funktionen sind nicht deterministisch. GETDATE() gibt beispielsweise das aktuelle Datum und die aktuelle Uhrzeit zurück. Ergebnisse von nicht deterministischen Funktionen können nicht indiziert werden, was die Fähigkeit des Abfrageprozessors beeinträchtigt, einen guten Plan für die Ausführung der Abfrage zu erstellen.
- Sortierung: Welche Sortierung wird verwendet, wenn Sie Funktionen verwenden, die Zeichendaten bearbeiten? Einige Funktionen verwenden die Sortierung (Sortierreihenfolge) des Eingabewerts, andere verwenden die Sortierung der Datenbank, wenn keine Eingabesortierung angegeben wird.
Beispiele für Skalarfunktionen
Zum Zeitpunkt der Erstellung dieses Artikels listet die technische Dokumentation von SQL Server mehr als 200 Skalarfunktionen auf, die mehrere Kategorien umfassen, darunter:
- Konfigurationsfunktionen (Transact-SQL)
- Konvertierungsfunktionen
- Cursorfunktionen
- Datums- und Uhrzeitfunktionen
- Mathematische Funktionen
- Metadatenfunktionen
- Sicherheitsfunktionen
- Zeichenfolgenfunktionen
- Systemfunktionen
- Statistische Systemfunktionen
- Text- und Bildfunktionen
In diesem Kurs bleibt nicht genügend Zeit, um jede Funktion zu beschreiben, aber die folgenden Beispiele zeigen einige häufig verwendete Funktionen.
Im folgenden hypothetischen Beispiel werden mehrere Datums- und Uhrzeitfunktionen verwendet:
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;
Teilergebnisse sind unten dargestellt:
Verkaufsbestellnr
OrderDate
OrderYear
OrderMonth
OrderDay
OrderWeekDay
YearsSinceOrder
71774
2008-06-01T00:00:00
2008
June
1
Sonntag
13
...
...
...
...
...
...
...
Das nächste Beispiel enthält einige mathematische Funktionen:
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;
Teilergebnisse:
TaxAmt
Gerundet
Etage
Ceiling
Squared
Root
Log
Zufällig
70.4279
70.0000
70.0000
71.0000
4960.089098
8.392133221
4.254589491
28.64120429
...
..
...
...
...
...
...
...
Im folgenden Beispiel werden einige Zeichenfolgenfunktionen verwendet:
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;
Teilergebnisse:
CompanyName
UpperCase
LowerCase
Länge
Reversed
FirstSpace
FirstWord
RestOfName
A Bike Store
A BIKE STORE
a bike store
12
erotS ekiB A
2
A
Bike Store
Progressive Sports
PROGRESSIVE SPORTS
progressive sports
18
stropS evissergorP
12
progressiv
Sport
Advanced Bike Components
ADVANCED BIKE COMPONENTS
advanced bike components
24
stnenopmoC ekiB decnavdA
9
Fortgeschrittene
Bike Components
...
...
...
...
...
...
...
...
Logische Funktionen
Eine andere Kategorie von Funktionen ermöglicht die Bestimmung, welcher von mehreren Werten zurückgegeben werden soll. Logische Funktionen werten einen Eingabeausdruck aus und geben basierend auf dem Ergebnis einen entsprechenden Wert zurück.
IIF
Die IIF-Funktion wertet einen booleschen Eingabeausdruck aus und gibt einen angegebenen Wert zurück, wenn der Ausdruck in TRUE ausgewertet wird, und einen alternativen Wert, wenn der Ausdruck in FALSE ausgewertet wird.
Betrachten Sie beispielsweise die folgende Abfrage, die den Adresstyp eines Kunden auswertet. Wenn der Wert „Main Office“ ist, gibt der Ausdruck „Billing“ zurück. Für alle anderen Adresstypwerte gibt der Ausdruck „Mailing“ zurück.
SELECT AddressType,
IIF(AddressType = 'Main Office', 'Billing', 'Mailing') AS UseAddressFor
FROM Sales.CustomerAddress;
Die Teilergebnisse dieser Abfrage können wie folgt aussehen:
Adresstyp
UseAddressFor
Main Office
Abrechnung
Versand
Mailing
...
...
CHOOSE
Die CHOOSE-Funktion wertet einen ganzzahligen Ausdruck aus und gibt den entsprechenden Wert aus einer Liste basierend auf seiner (1-basierten) Ordinalposition zurück.
SELECT SalesOrderID, Status,
CHOOSE(Status, 'Ordered', 'Shipped', 'Delivered') AS OrderStatus
FROM Sales.SalesOrderHeader;
Das mögliche Ergebnis dieser Abfrage könnte ungefähr so aussehen:
Verkaufsbestellnr
Status
OrderStatus
1234
3
Geliefert
1235
2
Shipped
1236
2
Shipped
1237
1
Bestellt
...
...
...