Använda skalärfunktioner

Slutförd

Skalärfunktioner returnerar ett enda värde och fungerar vanligtvis på en enda rad med data. Antalet indatavärden som de tar kan vara noll (till exempel GETDATE), ett (till exempel UPPER) eller flera (till exempel ROUND). Eftersom skalärfunktioner alltid returnerar ett enda värde kan de användas var som helst där ett enda värde (resultatet) behövs. De används oftast i SELECT-satser och WHERE-satspredikat. De kan också användas i SET-satsen i en UPDATE-instruktion.

Inbyggda skalärfunktioner kan ordnas i många kategorier, till exempel sträng, konvertering, logiska, matematiska och andra. I den här modulen tittar vi på några vanliga skalärfunktioner.

Några saker att tänka på när du använder skalärfunktioner är:

  • Determinism: Om funktionen returnerar samma värde för samma indata- och databastillstånd varje gång den anropas, säger vi att den är deterministisk. Till exempel returnerar ROUND(1.1, 0) alltid värdet 1,0. Många inbyggda funktioner är icke-terministiska. GETDATE() returnerar till exempel aktuellt datum och tid. Resultat från icke-förutbestämda funktioner kan inte indexeras, vilket påverkar frågeprocessorns möjlighet att komma med en bra plan för att köra frågan.
  • Sortering: Vilken sortering används när du använder funktioner som manipulerar teckendata? Vissa funktioner använder sortering (sorteringsordning) för indatavärdet. andra använder sortering av databasen om ingen indatasortering har angetts.

Exempel på skalär funktion

I skrivande stund listade den tekniska dokumentationen för SQL Server mer än 200 skalärfunktioner som omfattar flera kategorier, inklusive:

  • Konfigurationsfunktioner
  • Konverteringsfunktioner
  • Markörfunktioner
  • Funktionerna Date och Time
  • Matematiska funktioner
  • Metadatafunktioner
  • Säkerhetsfunktioner
  • Strängfunktioner
  • Systemfunktioner
  • Systemstatistikfunktioner
  • Text- och bildfunktioner

Det finns inte tillräckligt med tid i den här kursen för att beskriva varje funktion, men exemplen nedan visar några vanliga funktioner.

I följande hypotetiska exempel används flera datum- och tidsfunktioner:

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;

Partiella resultat visas nedan:

FörsäljningsorderID

Beställningsdatum

Orderår

Beställningsmånad

Beställningsdag

Veckodag för beställning

År sedan beställning

71774

2008-06-01T00:00:00

2008

Juni

1

söndag

tretton

...

...

...

...

...

...

...

I nästa exempel finns några matematiska funktioner:

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;

Partiella resultat:

TaxAmt

Rundad

Våning

Tak

Fyrkant

Rot

Loggas

Randomiserad

70.4279

70.0000

70.0000

71.0000

4960.089098

8.392133221

4.254589491

28.64120429

...

..

...

...

...

...

...

...

I följande exempel används vissa strängfunktioner:

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;

Partiella resultat:

Företagsnamn

Versal

Gemen

Längd

Omvänd

FirstSpace

FirstWord

RestOfName

En cykelbutik

EN CYKELBUTIK

en cykelbutik

12

erotS ekiB A

2

A

Cykelbutik

Progressiv sport

PROGRESSIVA SPORTER

progressiva sporter

18

stropS evissergorP

12

Progressiv

Sport

Avancerade cykelkomponenter

AVANCERADE CYKELKOMPONENTER

avancerade cykelkomponenter

24

Avancerade cykelkomponenter

9

Avancerad

Cykelkomponenter

...

...

...

...

...

...

...

...

Logiska funktioner

En annan funktionskategori gör det möjligt att avgöra vilka av flera värden som ska returneras. Logiska funktioner utvärderar ett indatauttryck och returnerar ett lämpligt värde baserat på resultatet.

IIF

Funktionen IIF utvärderar ett booleskt indatauttryck och returnerar ett angivet värde om uttrycket utvärderas till Sant och ett alternativt värde om uttrycket utvärderas till Falskt.

Tänk till exempel på följande fråga, som utvärderar en kunds adresstyp. Om värdet är "Main Office" returnerar uttrycket "Fakturering". För alla andra adresstypsvärden returnerar uttrycket "Utskick".

SELECT AddressType,
      IIF(AddressType = 'Main Office', 'Billing', 'Mailing') AS UseAddressFor
FROM Sales.CustomerAddress;

De partiella resultaten från den här frågan kan se ut så här:

Adresstyp

AnvändAdressFör

Huvudkontor

Fakturering

Frakt

Utskick

...

...

VÄLJA

Funktionen CHOOSE utvärderar ett heltalsuttryck och returnerar motsvarande värde från en lista baserat på dess (1-baserade) ordningsposition.

SELECT SalesOrderID, Status,
CHOOSE(Status, 'Ordered', 'Shipped', 'Delivered') AS OrderStatus
FROM Sales.SalesOrderHeader;

Resultatet från den här frågan kan se ut ungefär så här:

FörsäljningsorderID

Läge

OrderStatus

1234

3

Levererat

1235

2

Levererad

1236

2

Levererad

1237

1

Beställt

...

...

...