Použití skalárních funkcí

Dokončeno

Skalární funkce vracejí jednu hodnotu a obvykle pracují na jednom řádku dat. Počet vstupních hodnot, které berou, může být nula (například GETDATE), jedna (například VELKÁ) nebo násobek (například ZAOKROUHLIT). Vzhledem k tomu, že skalární funkce vždy vracejí jednu hodnotu, je možné je použít kdekoli, kde je potřeba jedna hodnota (výsledek). Nejčastěji se používají v klauzulích SELECT a predikátech klauzule WHERE. Lze je také použít v klauzuli SET příkazu UPDATE.

Předdefinované skalární funkce je možné uspořádat do mnoha kategorií, jako je řetězec, převod, logický, matematický a další. Tento modul se podívá na několik běžných skalárních funkcí.

Mezi důležité informace při použití skalárních funkcí patří:

  • Determinismus: Pokud funkce vrátí stejnou hodnotu pro stejný vstupní stav a stav databáze při každém zavolání, říkáme, že je deterministický. Například funkce ROUND(1,1; 0) vždy vrátí hodnotu 1,0. Mnoho předdefinovaných funkcí je nedeterministické. Například funkce GETDATE() vrátí aktuální datum a čas. Výsledky nedeterministických funkcí nelze indexovat, což má vliv na schopnost procesoru dotazů přijít s dobrým plánem pro spuštění dotazu.
  • Kolace: Používáte-li funkce, které manipulují s daty znaků, kterou kolaci použijete? Některé funkce používají kolaci (pořadí řazení) vstupní hodnoty; jiné používají kolaci databáze, pokud není zadána žádná vstupní kolace.

Příklady skalárních funkcí

V době psaní tohoto článku uvádí technická dokumentace k SQL Serveru více než 200 skalárních funkcí, které zahrnují více kategorií, včetně:

  • Konfigurační funkce
  • Převodní funkce
  • Funkce kurzoru
  • Funkce Date a Time
  • Matematické funkce
  • Funkce metadat
  • Funkce zabezpečení
  • Funkce řetězců
  • Systémové funkce
  • Statistické funkce systému
  • Funkce textu a obrázku

V tomto kurzu není dostatek času k popisu jednotlivých funkcí, ale níže uvedené příklady ukazují některé běžně používané funkce.

Následující hypotetický příklad používá několik funkcí data a času:

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;

Částečné výsledky jsou uvedené níže:

SalesOrderID

OrderDate

OrderYear

OrderMonth

OrderDay

OrderWeekDay

YearsSinceOrder

71774

2008-06-01T00:00:00

2008

Červen

0

Neděle

13

...

...

...

...

...

...

...

Další příklad obsahuje některé matematické funkce:

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;

Částečné výsledky:

TaxAmt

Zaokrouhlený

Podlaží

Horní mez

Čtvercový

Root

Protokol

Náhodně rozdělil

70.4279

70.0000

70.0000

71.0000

4960.089098

8.392133221

4.254589491

28.64120429

...

..

...

...

...

...

...

...

Následující příklad používá některé řetězcové funkce:

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;

Částečné výsledky:

CompanyName

Napsaný velkými písmeny

Malými písmeny

Délka

Reversed

FirstSpace

FirstWord

RestOfName

Obchod s koly

OBCHOD S KOLY

obchod s koly

12

erotS ekiB A

2

A

Bike Store

Progresivní sporty

PROGRESIVNÍ SPORTY

progresivní sporty

18

stropS evissergorP

12

Pokrokový

Sporty

Pokročilé komponenty pro kola

POKROČILÉ KOMPONENTY PRO KOLO

pokročilé součásti pro kola

24

stnenopmoC ekiB decnavdA

9

Rozšířený

Součásti pro kolo

...

...

...

...

...

...

...

...

Logické funkce

Další kategorie funkcí umožňuje určit, které z několika hodnot se má vrátit. Logické funkce vyhodnotí vstupní výraz a vrátí odpovídající hodnotu na základě výsledku.

IIF

Funkce IIF vyhodnotí logický vstupní výraz a vrátí zadanou hodnotu, pokud se výraz vyhodnotí jako True, a alternativní hodnotu, pokud se výraz vyhodnotí jako False.

Představte si například následující dotaz, který vyhodnocuje typ adresy zákazníka. Pokud je hodnota "Main Office", výraz vrátí "Billing". Pro všechny ostatní hodnoty typu adresy výraz vrátí "Korespondence".

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

Částečné výsledky tohoto dotazu můžou vypadat takto:

AddressType

UseAddressFor

Ústředí

Fakturace

Lodní doprava

Poštovní zásilka

...

...

ZVOLIT

Funkce CHOOSE vyhodnotí celočíselné výrazy a vrátí odpovídající hodnotu ze seznamu na základě jeho (1) řadové pozice.

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

Výsledky z tohoto dotazu můžou vypadat nějak takto:

SalesOrderID

Stav

OrderStatus

1 234

3

Doručení

1235

2

Dopraveno

1236

2

Dopraveno

1237

0

Objednáno

...

...

...