V SQL Server je často používaná funkce CAST()
, který převádí výraz jednoho datového typu na jiný. Pokud se však odeslání nezdaří, vrátí chybu.
Zadejte TRY_CAST()
.
TRY_CAST()
funkce nevrací chybu, pokud se přetypování nezdaří. Místo toho vrátí NULL
.
Existují však případy, kdy vrátí chybu.
Syntaxe
Syntaxe vypadá takto:
TRY_CAST ( expression AS data_type [ ( length ) ] )
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.
Příklad 1 – Obsazení úspěšné
Zde je příklad přetypování řetězce jako decimal
:
SELECT TRY_CAST('007' AS DECIMAL(5,2));
Výsledek:
7.00
V tomto případě se obsazení povedlo.
Příklad 2 – Cast selže a vrátí NULL
Zde je příklad selhání obsazení a NULL
se vrací:
SELECT TRY_CAST('Double Oh Seven!' AS DECIMAL(5,2));
Výsledek:
NULL
Odeslání se nezdařilo, a proto NULL
byl vrácen.
Pro srovnání zde uvádíme, co se stane, když použijeme CAST()
místo TRY_CAST()
:
SELECT CAST('Double Oh Seven!' AS DECIMAL(5,2));
Výsledek:
Msg 8114, Level 16, State 5, Line 1 Error converting data type varchar to numeric.
Příklad 3 – Cast selže a vrátí chybu
Existují případy, kdy TRY_CAST()
vrátí chybu.
Pokud přetypování není výslovně povoleno, vrátí chybu:
SELECT TRY_CAST(10 AS xml);
Výsledek:
Msg 529, Level 16, State 2, Line 1 Explicit conversion from data type int to xml is not allowed.
Další informace
Viz Jak CAST()
Funguje na serveru SQL Server pro další příklady převodu a CAST()
vs TRY_CAST()
v SQL Server pro porovnání mezi CAST()
a TRY_CAST()
.
Viz dokumentaci společnosti Microsoft pro CAST()
a CONVERT()
pro podrobnější informace (většina z nich platí také pro TRY_CAST()
).