Možná jste si všimli, že T-SQL obsahuje jak CONVERT()
funkce a TRY_CONVERT()
funkce, kterou můžete v SQL Server použít k provádění převodů mezi datovými typy. Pokud si ale lámete hlavu nad tím, jaký je rozdíl mezi těmito dvěma funkcemi, čtěte dál!
Rozdíl mezi CONVERT()
a TRY_CONVERT()
je ve způsobu, jakým zpracovávají datové typy, které nelze převést. Jeden způsobí chybu, zatímco druhý vrátí hodnotu null. Následující příklady to demonstrují.
Funkce CONVERT()
Nejprve se podívejme, co znamená CONVERT()
funkce ano. Převádí jeden datový typ na jiný. Zde je příklad:
SELECT 'Comments: ' + CONVERT(varchar(12), 9) AS Result;
Výsledek:
Result ----------- Comments: 9
V tomto příkladu převedeme int
hodnotu na varchar(12)
. A protože hodnotu bylo možné převést na požadovaný datový typ a délku, fungovalo to perfektně.
I když to funguje perfektně, když je převod úspěšný, co se stane, když selže?
Když se převod nezdaří → Chyba
Pojďme kód trochu vyladit a uvidíme, co se stane, když se převod nezdaří:
SELECT 'Comments: ' + CONVERT(varchar(1), 10.00) AS Result;
Výsledek:
Error: Arithmetic overflow error converting numeric to data type varchar.
Dostaneme chybu.
Funkce TRY_CONVERT()
TRY_CONVERT()
je alternativou, kterou můžeme použít, abychom zabránili chybové zprávě. Tato funkce provádí stejnou operaci převodu dat jako CONVERT()
, pokud však tato funkce nemůže provést převod, vrací null
:
SELECT 'Comments: ' + TRY_CONVERT(varchar(1), 10.00) AS Result;
Výsledek:
Result ------ null
Můžete vzít tento výsledek a použít podmíněný kód, takže se stane něco jiného v závislosti na tom, zda převod uspěje nebo ne.
Příklad:
SELECT CASE WHEN TRY_CONVERT(varchar(1), 10.00) IS NULL THEN 'Conversion failed' ELSE 'Conversion succeeded' END AS Result;
Výsledek:
Result ----------------- Conversion failed
Neplatné typy dat
Jedno upozornění s TRY_CONVERT()
je, že to takto funguje pouze při použití platných datových typů. Pokud tedy výslovně zadáte typ dat, který není povolen, zobrazí se chyba.
Příklad:
SELECT 'Comments: ' + TRY_CONVERT(Homer, 10.00) AS Result;
Výsledek:
Error: Type Homer is not a defined system type.