I SQL Server är en ofta använd funktion CAST()
, som konverterar ett uttryck av en datatyp till en annan. Men om rollbesättningen inte lyckas, returnerar den ett fel.
Ange TRY_CAST()
.
TRY_CAST()
funktionen returnerar inte ett fel om casten misslyckas. Istället returnerar den NULL
.
Det finns dock vissa tillfällen då det kommer att returnera ett fel.
Syntax
Syntaxen ser ut så här:
TRY_CAST ( expression AS data_type [ ( length ) ] )
Där expression
är uttrycket som ska konverteras, data_type
är den nya datatypen och length
är en valfri längd för den nya datatypen.
Exempel 1 – Cast lyckas
Här är ett exempel på hur du castar en sträng som decimal
:
SELECT TRY_CAST('007' AS DECIMAL(5,2));
Resultat:
7.00
I det här fallet lyckades rollbesättningen.
Exempel 2 – Cast misslyckas och returnerar NULL
Här är ett exempel på att casten misslyckas och NULL
returneras:
SELECT TRY_CAST('Double Oh Seven!' AS DECIMAL(5,2));
Resultat:
NULL
Casten misslyckades, och därför NULL
returnerades.
Som en jämförelse, här är vad som händer när vi använder CAST()
istället för TRY_CAST()
:
SELECT CAST('Double Oh Seven!' AS DECIMAL(5,2));
Resultat:
Msg 8114, Level 16, State 5, Line 1 Error converting data type varchar to numeric.
Exempel 3 – Cast misslyckas och returnerar ett fel
Det finns vissa tillfällen där TRY_CAST()
kommer att returnera ett fel.
Om en cast uttryckligen inte är tillåten, returnerar den ett felmeddelande:
SELECT TRY_CAST(10 AS xml);
Resultat:
Msg 529, Level 16, State 2, Line 1 Explicit conversion from data type int to xml is not allowed.
Mer information
Se hur CAST()
Fungerar i SQL Server för fler konverteringsexempel och CAST()
kontra TRY_CAST()
i SQL Server för en jämförelse mellan CAST()
och TRY_CAST()
.
Se Microsofts dokumentation för CAST()
och CONVERT()
för mer detaljerad information (det mesta gäller även för TRY_CAST()
).