Arbejd med datatyper

Fuldført

Kolonner og variabler, der bruges i Transact-SQL har hver især en datatype. Funktionsmåden for værdier i udtryk afhænger af datatypen for den kolonne eller variabel, der refereres til. Som du f.eks. så tidligere, kan du bruge operatoren + til at sammenkæde to strengværdier eller til at tilføje to numeriske værdier.

I følgende tabel vises almindelige datatyper, der understøttes i en SQL Server-database.

Nøjagtigt numerisk

Omtrentlig numerisk

Tegn

dato og klokkeslæt

Binær

Anden

tinyint

flyde

char

dato

binær

markør

smallint

reel

varchar

klokkeslæt

varbinary

hierarchyid

heltal

sende sms

datetime

afbildning

sql_variant

bigint

nchar

datetime2

tabel

bit

nvarchar

smalldatetime

tidsstempel

decimal/numerisk

ntext

datetimeoffset

uniqueidentifier

numerisk

xml

penge

geografi

smallmoney

geometri

Seddel

Du kan finde flere oplysninger om de forskellige datatyper og deres attributter i dokumentationen tilTransact-SQL reference.

Konvertering af datatype

Kompatible datatypeværdier kan konverteres implicit efter behov. Lad os f.eks. antage, at du kan bruge operatoren + til at føje et heltal til et decimaltal eller til at sammenkæde en tegnværdi med fast længde og en variabel længde varchar-værdi . I nogle tilfælde kan du dog være nødt til eksplicit at konvertere værdier fra én datatype til en anden – f.eks. vil forsøg på at sammenkæde + en varchar-værdi og en decimalværdi resultere i en fejl, medmindre du først konverterer den numeriske værdi til en kompatibel strengdatatype.

Seddel

Implicitte og eksplicitte konverteringer gælder for visse datatyper, og nogle konverteringer er ikke mulige. Du kan få flere oplysninger ved at bruge diagrammet i dokumentationen tilTransact-SQL reference.

T-SQL indeholder funktioner, der hjælper dig med eksplicit at konvertere mellem datatyper

CAST og TRY_CAST

Funktionen CAST konverterer en værdi til en angivet datatype, hvis værdien er kompatibel med destinationsdatatypen. Der returneres en fejl, hvis den ikke er kompatibel.

Følgende forespørgsel bruger f.eks. CAST til at konvertere heltalsværdierne i kolonnen ProductID til varchar-værdier (med maksimalt 4 tegn) for at sammenkæde dem med en anden tegnbaseret værdi:

SELECT CAST(ProductID AS varchar(4)) + ': ' + Name AS ProductName
FROM Production.Product;

Det mulige resultat af denne forespørgsel kan se nogenlunde sådan ud:

ProductName

680: HL Road Frame - Sort, 58

706: HL Road Frame - Rød, 58

707: Sport-100 Hjelm, Rød

708: Sport-100 Hjelm, sort

...

Men lad os antage, at kolonnen Size i tabellen Production.Product er en nvarchar-kolonne (variabel længde, Unicode-tekstdata), der indeholder nogle numeriske størrelser (f.eks. 58) og nogle tekstbaserede størrelser (f.eks. "S", "M" eller "L"). Følgende forespørgsel forsøger at konvertere værdier fra denne kolonne til en heltalsdatatype :

SELECT CAST(Size AS integer) As NumericSize
FROM Production.Product;

Denne forespørgsel resulterer i følgende fejlmeddelelse:

Fejl! Konverteringen mislykkedes under konvertering af nvarchar-værdien 'M' til datatypen int.

Da mindst nogle af værdierne i kolonnen er numeriske, kan det være en god idé at konvertere disse værdier og ignorere de andre. Du kan bruge funktionen TRY_CAST til at konvertere datatyper.

SELECT TRY_CAST(Size AS integer) As NumericSize
FROM Production.Product;

Resultaterne denne gang ser måske sådan ud:

NumericSize

58

58

NULL

NULL

...

De værdier, der kan konverteres til en numerisk datatype, returneres som decimalværdier , og de inkompatible værdier returneres som NULL, hvilket bruges til at angive, at en værdi er ukendt.

Seddel

Vi undersøger overvejelserne i forbindelse med håndtering af NULL-værdier senere i dette undermodul.

KONVERTÉR og TRY_CONVERT

CAST er SQL-standardfunktionen ANSI til konvertering mellem datatyper og bruges i mange databasesystemer. I Transact-SQL kan du også bruge funktionen CONVERT som vist her:

SELECT CONVERT(varchar(4), ProductID) + ': ' + Name AS ProductName
FROM Production.Product;

Denne forespørgsel returnerer igen den værdi, der er konverteret til den angivne datatype, f.eks.:

ProductName

680: HL Road Frame - Sort, 58

706: HL Road Frame - Rød, 58

707: Sport-100 Hjelm, Rød

708: Sport-100 Hjelm, sort

...

Ligesom CAST har CONVERT en TRY_CONVERT variant, der returnerer NULL for inkompatible værdier.

En anden fordel ved at bruge KONVERTÉR via CAST er, at CONVERT også indeholder en parameter, der giver dig mulighed for at angive en formattypografi, når du konverterer numeriske værdier og datoværdier til strenge. Overvej f.eks. følgende forespørgsel:

SELECT SellStartDate,
       CONVERT(varchar(20), SellStartDate) AS StartDate,
       CONVERT(varchar(10), SellStartDate, 101) AS FormattedStartDate 
FROM SalesLT.Product;

Resultaterne fra denne forespørgsel kan se nogenlunde sådan ud:

Sælg startdato

StartDate

Formateret startdato

2002-06-01T00:00:00.0000000

1. juni 2002 kl. 12:00

6/1/2002

2002-06-01T00:00:00.0000000

1. juni 2002 kl. 12:00

6/1/2002

2005-07-01T00:00:00.0000000

1. jul 2005 kl. 12:00

7/1/2005

2005-07-01T00:00:00.0000000

1. jul 2005 kl. 12:00

7/1/2005

...

...

...

Seddel

Du kan finde flere oplysninger om formateringskoder for typografier , som du kan bruge sammen med CONVERT, i dokumentationen tilTransact-SQL reference.

PARSE og TRY_PARSE

Funktionen PARSE er designet til at konvertere formaterede strenge, der repræsenterer numeriske værdier eller dato-/klokkeslætsværdier. Overvej f.eks. følgende forespørgsel (som bruger konstantværdier i stedet for værdier fra kolonner i en tabel):

SELECT PARSE('01/01/2021' AS date) AS DateValue,
   PARSE('$199.99' AS money) AS MoneyValue;

Resultaterne af denne forespørgsel ser sådan ud:

DateValue

MoneyValue

2021-01-01T00:00:00.0000000

199.99

På samme måde som CAST og CONVERT har PARSE en TRY_PARSE variant, der returnerer inkompatible værdier som NULL.

Seddel

Når du arbejder med decimaldatatyper eller numeriske datatyper, skal du muligvis afrunde til et helt tal eller angive decimaltegnet, hvilket kan opnås ved hjælp af præcision og skalering. Du kan få en bedre forståelse af dette begreb præcision og skalering i dokumentationen tilTransact-SQL reference.

STR

Funktionen STR konverterer en numerisk værdi til en varchar.

For eksempel:

SELECT ProductID,  '$' + STR(ListPrice) AS Price
FROM Production.Product;

Resultaterne ser nogenlunde sådan ud:

Instruktion

Pris

680

1432,00 USD

706

1432,00 USD

707

35,00 USD

...

...