Verwenden von Skalarfunktionen

Abgeschlossen

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

...

...

...