sql >> Databáze >  >> RDS >> Sqlserver

CONVERT() vs TRY_CONVERT v SQL Server:Jaký je rozdíl?

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.


  1. Jak se spouštějí paralelní plány – část 4

  2. SQL dotaz pro stromovou tabulku

  3. MariaDB LCASE() Vysvětleno

  4. Jak číst binární soubory protokolu MySQL (BinLog) pomocí mysqlbinlog