V SQL Server, TRY_CONVERT()
funkce je velmi podobná funkci CONVERT()
funkce kromě toho TRY_CONVERT()
nevrací chybu, pokud se převod nezdaří (CONVERT()
dělá).
Místo toho TRY_CONVERT()
funkce vrací NULL
pokud se převod nezdaří.
Existují však případy, kdy TRY_CONVERT()
vrátí chybu.
Syntaxe
Syntaxe vypadá takto:
TRY_CONVERT ( data_type [ ( length ) ], expression [, style ] )
Kde expression
je výraz, který se má převést, data_type
je nový datový typ a length
je volitelná délka pro nový datový typ.
Volitelný style
argument lze použít k určení, jak má funkce přeložit expression
argument. Tento argument můžete například použít k určení formátu data.
Příklad 1 – Konverze je úspěšná
Zde je příklad převodu řetězce na desítkové:
SELECT TRY_CONVERT(DECIMAL(5,2), '007');
Výsledek:
7.00
V tomto případě byla konverze úspěšná.
Příklad 2 – Převod selže a vrátí NULL
Zde je příklad selhání převodu a NULL
se vrací:
SELECT TRY_CONVERT(DECIMAL(5,2), 'Three');
Výsledek:
NULL
Převod se nezdařil, a proto NULL
byl vrácen.
Pro srovnání, zde je to, co se stane, když použijeme CONVERT()
místo TRY_CONVERT()
:
SELECT CONVERT(DECIMAL(5,2), 'Three');
Výsledek:
Msg 8114, Level 16, State 5, Line 1 Error converting data type varchar to numeric.
Příklad 3 – Převod selže a vrátí chybu
Existují případy, kdy TRY_CONVERT()
vrátí chybu.
Pokud konverze není výslovně povolena, vrátí chybu:
SELECT TRY_CONVERT(xml, 10);
Výsledek:
Msg 529, Level 16, State 2, Line 1 Explicit conversion from data type int to xml is not allowed.
Příklad 4 – style
Argument
Můžeme použít volitelný style
argument k určení, jak má být výraz přeložen.
Příklad:
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";
Výsledek:
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 | +------------+------------+--------------+------------+------------+
Zde jsem nastavil svůj jazyk na British
a poté spusťte TRY_CONVERT()
několikrát, každý pomocí jiného style
argument (kromě prvního, který používá výchozí jazyk mé relace – britský).
Vidíme, že argument style ovlivňuje způsob překladu výrazu.
Další informace
Viz CONVERT()
v SQL Server pro další příklady převodu a CONVERT()
vs TRY_CONVERT()
v SQL Server pro porovnání mezi CONVERT()
a TRY_CONVERT()
.
Viz dokumentaci společnosti Microsoft pro CAST()
a CONVERT()
pro podrobnější informace (většina z nich platí také pro TRY_CONVERT()
).