I SQL Server er CAST()
funktion konverterer et udtryk af én datatype til en anden.
Her er et hurtigt overblik over funktionen med eksempler.
Syntaks
Syntaksen ser sådan ud:
CAST ( expression AS data_type [ ( length ) ] )
Hvor expression
er udtrykket, der skal konverteres, data_type
er den nye datatype og length
er en valgfri længde for den nye datatype.
Eksempel
Her er et eksempel på casting af en streng som decimal:
SELECT CAST('007' AS DECIMAL(5,2));
Resultat:
7.00
String til dato
Her er et eksempel på casting af en streng til en dato:
SELECT CAST('09 Feb 2030' AS date);
Resultat:
2030-02-09
I dette tilfælde CAST()
funktion var i stand til at bestemme, hvilke datodele er hvilke, fordi jeg har angivet datoen i et format, som den genkender.
Hvis du sender en værdi, der ikke kan castes som en dato, resulterer det i en fejl:
SELECT CAST('Next Xmas' AS date);
Resultat:
Msg 241, Level 16, State 1, Line 1 Conversion failed when converting date and/or time from character string.
Lokal
Sproget i den aktuelle session kan gøre en forskel i, hvordan datoer fortolkes.
Her er, hvad der sker, når du bruger det britiske sprog:
SET LANGUAGE British;
SELECT CAST('09/02/2030' AS date);
Resultat:
2030-02-09
I dette tilfælde blev datoen fortolket som værende den niende dag i februar.
Lad os ændre sproget til us_English
:
SET LANGUAGE us_English;
SELECT CAST('09/02/2030' AS date);
Resultat:
2030-09-02
Denne gang fortolkede den datoen som værende den anden dag i september.
Stringsammenkædning
Her er et eksempel på at caste en numerisk værdi til en streng for at sammenkæde værdien med en streng:
SELECT 'Likes: ' + CAST(178 AS VARCHAR(10));
Resultat:
Likes: 178
Her er, hvad der sker, hvis vi ikke caster det:
SELECT 'Likes: ' + 178;
Resultat:
Msg 245, Level 16, State 1, Line 1 Conversion failed when converting the varchar value 'Likes: ' to data type int.
Når du forsøger at sammenkæde to værdier med forskellige datatyper, skal SQL Server implicit konvertere en af værdierne til at bruge den andens datatype, så de begge er den samme datatype, før den kan udføre sammenkædningen. Det følger reglerne for datatypeprioritet at udføre denne konvertering.
I SQL Server er INT
datatypen har en højere prioritet end VARCHAR
.
Derfor forsøger SQL Server i ovenstående eksempel at konvertere strengen til et heltal. Men dette mislykkes, fordi strengen ikke kan konverteres til et heltal.
Trunkering af tekst
Et praktisk lille trick, vi kan udføre med CAST()
Funktionen er at afkorte længere strenge til en mere læsbar længde.
Her er et eksempel på afkortning af tekst valgt fra en databasetabel:
SELECT
ProductName,
CAST(ProductName AS VARCHAR(20)) AS Truncated
FROM Products;
Resultat:
+---------------------------------+----------------------+ | ProductName | Truncated | |---------------------------------+----------------------| | Left handed screwdriver | Left handed screwdri | | Long Weight (blue) | Long Weight (blue) | | Long Weight (green) | Long Weight (green) | | Sledge Hammer | Sledge Hammer | | Chainsaw | Chainsaw | | Straw Dog Box | Straw Dog Box | | Bottomless Coffee Mugs (4 Pack) | Bottomless Coffee Mu | | Right handed screwdriver | Right handed screwdr | +---------------------------------+----------------------+
Flere oplysninger
CAST()
funktionen fungerer på samme måde som CONVERT()
funktion, og mange datakonverteringer kan udføres ved hjælp af begge. Når det er sagt, er der forskelle mellem dem.
Se Microsofts dokumentation for CAST()
og CONVERT()
for mere detaljerede oplysninger om brugen af denne funktion.