V SQL Server, PARSE()
a TRY_PARSE()
funkce se používají k převodu hodnoty do jiného datového typu. Dělají v podstatě totéž, s jedinou výjimkou; jak se vypořádávají s chybami.
Pokud PARSE()
selže při pokusu o analýzu na jiný datový typ, vrátí chybu. Pokud TRY_PARSE()
selže, vrátí NULL
.
Příklad 1 – Za prvé, podobnosti
Zde je příklad, který ukazuje, jak obě funkce vracejí stejný výsledek, když mohou úspěšně analyzovat hodnotu na požadovaný datový typ:
SELECT PARSE('Fri, 8 June 2018' AS date) AS PARSE, PARSE('Fri, 8 June 2018' AS date) AS TRY_PARSE;
Výsledek:
+------------+-------------+ | PARSE | TRY_PARSE | |------------+-------------| | 2018-06-08 | 2018-06-08 | +------------+-------------+
Jak se očekávalo, oba vrátí přesně stejný výsledek.
Ale podívejme se, co se stane, když nebudou schopni analyzovat hodnotu na požadovaný datový typ.
Příklad 2 – Když PARSE() selže
Zde je příklad toho, co se stane, když PARSE()
není schopen analyzovat hodnotu na jinou hodnotu:
SELECT PARSE('Next year' AS date) AS Result;
Výsledek:
Error converting string value 'Next year' into data type date using culture ''.
Operace se nezdaří, protože jsem neposkytl platnou reprezentaci požadovaného datového typu. Jinými slovy PARSE()
Next year
nelze převést do rande datový typ podle požadavku.
Příklad 3 – Když TRY_PARSE() selže
Zde je příklad, kdy se snažíme analyzovat stejnou hodnotu pomocí TRY_PARSE()
:
SELECT TRY_PARSE('Next year' AS date) AS Result;
Výsledek:
+----------+ | Result | |----------| | NULL | +----------+
Analýza se stále nezdaří, ale vrací NULL
místo chyby.
Příklad 4 – Použití TRY_PARSE() s podmíněným příkazem
Můžeme vzít TRY_PARSE()
a otestujte jeho návratovou hodnotu. Pokud je to hodnota NULL, můžeme vrátit jednu věc, pokud to není hodnota NULL, můžeme vrátit jinou:
SELECT CASE WHEN TRY_PARSE('Next year' AS date) IS NULL THEN 'Conversion failed' ELSE 'Conversion succeeded' END AS Result;
Výsledek:
+-------------------+ | Result | |-------------------| | Conversion failed | +-------------------+
Příklad 5 – TRY_PARSE() s chybou
Jen proto, že TRY_PARSE()
nevede k chybě ve výše uvedených příkladech, neznamená to, že nikdy vede k chybě. Jsou chvíle, kdy se při používání této funkce stále může objevit chyba.
Pokud například uvedete neplatnou hodnotu jako culture
, zobrazí se chyba argument:
SELECT TRY_PARSE('Next year' AS date USING 'Mars') AS Result;
Výsledek:
The culture parameter 'Mars' provided in the function call is not supported.
Několik poznámek k těmto funkcím
Zde je několik bodů, které má společnost Microsoft k těmto funkcím říci:
- Doporučujeme použít
PARSE()
aTRY_PARSE()
pouze pro převod z řetězce na typ data/času a čísel. Pro ostatní datové typy použijteCAST()
neboCONVERT()
. - Tyto funkce spoléhají na přítomnost .NET Framework Common Language Runtime (CLR).
- Při analýze hodnoty řetězce je určitá režie výkonu.
- Tyto funkce nebudou vzdálené, protože závisí na přítomnosti CLR. Pokus o vzdálenou funkci, která vyžaduje CLR, by způsobil chybu na vzdáleném serveru.