I SQL Server, TRY_CONVERT()
funktionen är mycket lik CONVERT()
funktion, förutom att TRY_CONVERT()
returnerar inte ett fel om konverteringen misslyckas (CONVERT()
gör).
Istället, TRY_CONVERT()
funktion returnerar NULL
om konverteringen inte lyckas.
Det finns dock vissa tillfällen där TRY_CONVERT()
kommer att returnera ett fel.
Syntax
Syntaxen ser ut så här:
TRY_CONVERT ( data_type [ ( length ) ], expression [, style ] )
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.
Den valfria style
argument kan användas för att specificera hur funktionen ska översätta expression
argument. Du kan till exempel använda detta argument för att ange datumformatet.
Exempel 1 – Konverteringen lyckas
Här är ett exempel på att konvertera en sträng till decimal:
SELECT TRY_CONVERT(DECIMAL(5,2), '007');
Resultat:
7.00
I det här fallet lyckades konverteringen.
Exempel 2 – Konvertering misslyckas och returnerar NULL
Här är ett exempel på att konverteringen misslyckades och NULL
returneras:
SELECT TRY_CONVERT(DECIMAL(5,2), 'Three');
Resultat:
NULL
Konverteringen misslyckades, och därför NULL
returnerades.
Som en jämförelse, här är vad som händer när vi använder CONVERT()
istället för TRY_CONVERT()
:
SELECT CONVERT(DECIMAL(5,2), 'Three');
Resultat:
Msg 8114, Level 16, State 5, Line 1 Error converting data type varchar to numeric.
Exempel 3 – Konverteringen misslyckas och returnerar ett fel
Det finns några tillfällen där TRY_CONVERT()
kommer att returnera ett fel.
Om en konvertering uttryckligen inte är tillåten, returnerar den ett felmeddelande:
SELECT TRY_CONVERT(xml, 10);
Resultat:
Msg 529, Level 16, State 2, Line 1 Explicit conversion from data type int to xml is not allowed.
Exempel 4 – style
Argument
Vi kan använda den valfria style
argument för att specificera hur uttrycket ska översättas.
Exempel:
SET LANGUAGE British;
SELECT
TRY_CONVERT(date, '09/02/2030') AS "British",
TRY_CONVERT(date, '09/02/2030', 101) AS "US",
TRY_CONVERT(date, '09/02/30', 1) AS "US (short)",
TRY_CONVERT(date, '20300902', 112) AS "ISO",
TRY_CONVERT(date, '09.02.2030', 104) AS "German";
Resultat:
Changed language setting to British. +------------+------------+--------------+------------+------------+ | British | US | US (short) | ISO | German | |------------+------------+--------------+------------+------------| | 2030-02-09 | 2030-09-02 | 2030-09-02 | 2030-09-02 | 2030-02-09 | +------------+------------+--------------+------------+------------+
Här ställer jag in mitt språk till British
, körde sedan TRY_CONVERT()
flera gånger, var och en med olika style
argument (förutom det första, som använder standardspråket för min session – brittiska).
Vi kan se att stilargumentet påverkar hur uttrycket översätts.
Mer information
Se CONVERT()
i SQL Server för fler konverteringsexempel och CONVERT()
kontra TRY_CONVERT()
i SQL Server för en jämförelse mellan CONVERT()
och TRY_CONVERT()
.
Se Microsofts dokumentation för CAST()
och CONVERT()
för mer detaljerad information (det mesta gäller även för TRY_CONVERT()
).