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

CAST() vs TRY_CAST() v SQL Server:Jaký je rozdíl?

Při převodu mezi datovými typy v SQL Serveru narazíte na různé funkce, které zdánlivě dělají totéž. Mezi těmito funkcemi však obvykle existují rozdíly, které nemusí být na první pohled patrné. Příkladem toho je rozdíl mezi CAST() a TRY_CAST() funkce.

Tento článek ukazuje rozdíl mezi těmito funkcemi při použití serveru SQL.

Hlavní rozdíl mezi CAST() a TRY_CAST() funkce je ve způsobu, jakým zpracovávají data, která nelze převést.

Funkce CAST()

CAST() funkce převede výraz jednoho datového typu na jiný. To vám umožňuje dělat věci, jako je zřetězení dvou hodnot různých datových typů. Takhle:

SELECT 'Comments: ' + CAST(9 AS varchar(12)) AS Result;

Výsledek:

Result     
-----------
Comments: 9

To funguje dobře, když lze data převést. Ale co když data nelze převést?

V tom případě dostanete něco takového:

SELECT 'Comments: ' + CAST(10.00 AS varchar(1)) AS Result;

Výsledek:

Error: Arithmetic overflow error converting numeric to data type varchar.

To je dostatečně spravedlivé – pokud SQL Server nedokáže převést data, musíte to vědět!

Existuje však jiný způsob, jak to udělat.

Funkce TRY_CAST()

 TRY_CAST() funkce funguje stejně jako CAST() kromě toho, že pokud data nelze převést, vrátí null (místo vyvolání chyby jako CAST() dělá):

SELECT 'Comments: ' + TRY_CAST(10.00 AS varchar(1)) AS Result;

Výsledek:

Result
------
null

To se může hodit, pokud chcete použít podmíněné programování, aby aplikace provedla jiný úkol v závislosti na tom, zda lze data převést nebo ne.

Příklad:

SELECT   
    CASE WHEN TRY_CAST(10.00 AS varchar(2)) IS NULL   
    THEN 'Cast failed'  
    ELSE 'Cast succeeded'  
END AS Result;

Výsledek:

Result     
-----------
Cast failed

Neplatné typy dat

 TRY_CAST() Funkce funguje tímto způsobem 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_CAST(10.00 AS Miami) AS Result;

Výsledek:

Error: Type Miami is not a defined system type.

  1. Migrace databáze Oracle z AWS EC2 na AWS RDS, část 2

  2. Co znamená klíčové slovo KEY?

  3. Problémy s výkonem u SQL Server 2012 Enterprise Edition v rámci licence CAL

  4. Nelze se připojit k serveru – chyba související se sítí nebo specifická pro instanci