Werken met gegevenstypen
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
...
...