I SQL Server er TRY_CONVERT()
Funktionen ligner meget CONVERT()
funktion, bortset fra at TRY_CONVERT()
returnerer ikke en fejl, hvis konverteringen mislykkes (CONVERT()
gør).
I stedet er TRY_CONVERT()
funktion returnerer NULL
hvis konverteringen ikke lykkes.
Der er dog nogle tilfælde, hvor TRY_CONVERT()
vil returnere en fejl.
Syntaks
Syntaksen ser sådan ud:
TRY_CONVERT ( data_type [ ( length ) ], expression [, style ] )
Hvor expression
er udtrykket, der skal konverteres, data_type
er den nye datatype og length
er en valgfri længde for den nye datatype.
Den valgfri style
argument kan bruges til at specificere, hvordan funktionen skal oversætte expression
argument. For eksempel kan du bruge dette argument til at angive datoformatet.
Eksempel 1 – Konverteringen lykkes
Her er et eksempel på konvertering af en streng til decimal:
SELECT TRY_CONVERT(DECIMAL(5,2), '007');
Resultat:
7.00
I dette tilfælde lykkedes konverteringen.
Eksempel 2 – Konvertering mislykkedes og returnerer NULL
Her er et eksempel på, at konverteringen mislykkedes og NULL
bliver returneret:
SELECT TRY_CONVERT(DECIMAL(5,2), 'Three');
Resultat:
NULL
Konverteringen mislykkedes, og derfor NULL
blev returneret.
Til sammenligning er her, hvad der sker, når vi bruger CONVERT()
i stedet for TRY_CONVERT()
:
SELECT CONVERT(DECIMAL(5,2), 'Three');
Resultat:
Msg 8114, Level 16, State 5, Line 1 Error converting data type varchar to numeric.
Eksempel 3 – Konvertering mislykkes og returnerer en fejl
Der er nogle tilfælde, hvor TRY_CONVERT()
vil returnere en fejl.
Hvis en konvertering udtrykkeligt ikke er tilladt, returnerer den en fejl:
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.
Eksempel 4 – style
Argument
Vi kan bruge den valgfri style
argument for at specificere, hvordan udtrykket skal oversættes.
Eksempel:
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 | +------------+------------+--------------+------------+------------+
Her indstiller jeg mit sprog til British
, og kørte derefter TRY_CONVERT()
flere gange, hver med en anden style
argument (undtagen det første, som bruger standardsproget for min session – britisk).
Vi kan se, at stilargumentet påvirker, hvordan udtrykket oversættes.
Flere oplysninger
Se CONVERT()
i SQL Server for flere konverteringseksempler og CONVERT()
vs TRY_CONVERT()
i SQL Server for en sammenligning mellem CONVERT()
og TRY_CONVERT()
.
Se Microsofts dokumentation for CAST()
og CONVERT()
for mere detaljeret information (det meste af det gælder også for TRY_CONVERT()
).