Werken met gegevenstypen

Voltooid

Kolommen en variabelen die in Transact-SQL worden gebruikt, hebben elk een gegevenstype. Het gedrag van waarden in expressies is afhankelijk van het gegevenstype van de kolom of variabele waarnaar wordt verwezen. Zoals u eerder hebt gezien, kunt u bijvoorbeeld de + operator gebruiken om twee tekenreekswaarden samen te voegen of om twee numerieke waarden toe te voegen.

In de volgende tabel ziet u algemene gegevenstypen die worden ondersteund in een SQL Server-database.

Exacte numerieke waarde

Bij benadering numeriek

Teken

Datum/tijd

Binaire

Overige

tinyint

zwevend

char

datum

binair

cursor

smallint

werkelijk

varchar

tijd

varbinary

hiƫrarchie-id

int (integer)

sms verzenden

datum/tijd

afbeelding

sql_variant

bigint

nchar

datetime2

tafel

beetje

nvarchar

smalldatetime

tijdstempel

decimaal/numeriek

ntekst

datetimeoffset

unieke identificatiecode

numeriek

xml

geld

geografie

smallmoney

meetkunde

Notitie

Ga naar de Transact-SQL referentiedocumentatie voor meer informatie over de verschillende gegevenstypen en hun kenmerken.

Conversie van gegevenstype

Compatibele gegevenstypewaarden kunnen naar behoefte impliciet worden geconverteerd. Stel dat u de + operator kunt gebruiken om een geheel getal toe te voegen aan een decimaal getal of om een tekenwaarde met vaste lengte en een variabele lengte varchar-waarde samen te voegen. In sommige gevallen moet u echter mogelijk expliciet waarden van het ene gegevenstype naar het andere converteren. Als u bijvoorbeeld probeert een + samen te voegen en een decimale waarde, treedt er een fout op, tenzij u eerst de numerieke waarde converteert naar een compatibel gegevenstype tekenreeks.

Notitie

Impliciete en expliciete conversies zijn van toepassing op bepaalde gegevenstypen en sommige conversies zijn niet mogelijk. Gebruik de grafiek in de Transact-SQL referentiedocumentatie voor meer informatie.

T-SQL bevat functies om u te helpen expliciet te converteren tussen gegevenstypen

CAST en TRY_CAST

De functie CAST converteert een waarde naar een opgegeven gegevenstype als de waarde compatibel is met het doelgegevenstype. Er wordt een fout geretourneerd als deze niet compatibel is.

De volgende query maakt bijvoorbeeld gebruik van CAST om de gehele getallen in de kolom Product-id te converteren naar varchar-waarden (met maximaal 4 tekens) om ze samen te stellen met een andere op tekens gebaseerde waarde:

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

Het mogelijke resultaat van deze query kan er ongeveer als volgt uitzien:

ProductName

680: HL Road Frame - Zwart, 58

706: HL Road Frame - Rood, 58

707: Sport-100 Helm, Rood

708: Sport-100 Helm, Zwart

...

Stel dat de kolom Grootte in de tabel Production.Product een nvarchar-kolom (variabele lengte, Unicode-tekstgegevens) is die een aantal numerieke grootten (zoals 58) en een aantal op tekst gebaseerde grootten (zoals 'S', 'M' of 'L' bevat). Met de volgende query worden waarden uit deze kolom geconverteerd naar het integer gegevenstype:

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

Deze query resulteert in het volgende foutbericht:

Fout: conversie is mislukt bij het converteren van de nvarchar-waarde 'M' naar het gegevenstype int.

Aangezien ten minste enkele waarden in de kolom numeriek zijn, kunt u deze waarden converteren en de andere waarden negeren. U kunt de functie TRY_CAST gebruiken om gegevenstypen te converteren.

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

De resultaten zien er deze keer als volgt uit:

Numerieke grootte

58

58

NUL

NUL

...

De waarden die kunnen worden geconverteerd naar een numeriek gegevenstype, worden geretourneerd als decimale waarden en de niet-compatibele waarden worden geretourneerd als NULL, die wordt gebruikt om aan te geven dat een waarde onbekend is.

Notitie

Verderop in deze les verkennen we overwegingen voor het verwerken van NULL-waarden .

CONVERTEREN en TRY_CONVERT

CAST is de ANSI-standaard SQL-functie voor het converteren tussen gegevenstypen en wordt gebruikt in veel databasesystemen. In Transact-SQL kunt u ook de functie CONVERTEREN gebruiken, zoals hier wordt weergegeven:

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

Deze query retourneert opnieuw de waarde die is geconverteerd naar het opgegeven gegevenstype, zoals deze:

ProductName

680: HL Road Frame - Zwart, 58

706: HL Road Frame - Rood, 58

707: Sport-100 Helm, Rood

708: Sport-100 Helm, Zwart

...

Net als CAST heeft CONVERT een TRY_CONVERT variant die NULL retourneert voor incompatibele waarden.

Een ander voordeel van het gebruik van CONVERTEREN via CAST is dat CONVERTEREN ook een parameter bevat waarmee u een opmaakstijl kunt opgeven bij het converteren van numerieke en datumwaarden naar tekenreeksen. Kijk bijvoorbeeld eens naar de volgende query:

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

De resultaten van deze query kunnen er ongeveer als volgt uitzien:

VerkoopStartdatum

Begindatum

OpgemaakteStartDatum

2002-06-01T00:00:00.0000000

1 juni 2002 12:00 uur

6/1/2002

2002-06-01T00:00:00.0000000

1 juni 2002 12:00 uur

6/1/2002

2005-07-01T00:00:00.0000000

1 juli 2005 12:00 uur

01-07-2005

2005-07-01T00:00:00.0000000

1 juli 2005 12:00 uur

01-07-2005

...

...

...

Notitie

Zie de Transact-SQL referentiedocumentatie voor meer informatie over stijlopmaakcodes die u kunt gebruiken met CONVERTEREN.

PARSEREN en TRY_PARSE

De functie PARS is ontworpen om opgemaakte tekenreeksen te converteren die numerieke waarden of datum/tijd-waarden vertegenwoordigen. Denk bijvoorbeeld aan de volgende query (die letterlijke waarden gebruikt in plaats van waarden uit kolommen in een tabel):

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

De resultaten van deze query zien er als volgt uit:

Datumwaarde

MoneyValue

2021-01-01T00:00:00.0000000

199.99

Net als bij CAST en CONVERT heeft PARSE een TRY_PARSE variant die incompatibele waarden retourneert als NULL.

Notitie

Wanneer u werkt met decimale of numerieke gegevenstypen, moet u mogelijk afronden op een geheel getal of het decimaalteken instellen, dat kan worden bereikt via precisie en schaal. Zie de Transact-SQL referentiedocumentatie voor meer inzicht in dit concept van precisie en schaal.

STR

De functie STR converteert een numerieke waarde naar een varchar.

Voorbeeld:

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

De resultaten zien er ongeveer als volgt uit:

ProductID

Prijs

680

$ 1432,00

706

$ 1432,00

707

$ 35,00

...

...