Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

CAST() vs TRY_CAST() no SQL Server:Qual é a diferença?


Ao converter entre tipos de dados no SQL Server, você encontrará várias funções que aparentemente fazem a mesma coisa. No entanto, geralmente há diferenças entre essas funções que podem não ser aparentes à primeira vista. Um exemplo disso é a diferença entre o CAST() e TRY_CAST() funções.

Este artigo demonstra a diferença entre essas funções ao usar o SQL Server.



A principal diferença entre o CAST() e TRY_CAST() funções está na maneira como lidam com dados que não podem ser convertidos.

A função CAST()


O CAST() função converte uma expressão de um tipo de dados para outro. Isso permite que você faça coisas como concatenar dois valores de diferentes tipos de dados. Assim:
SELECT 'Comments: ' + CAST(9 AS varchar(12)) AS Result;

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

Isso funciona bem quando os dados podem ser convertidos. Mas e se os dados não puderem ser convertidos?

Nesse caso, você obterá algo assim:
SELECT 'Comments: ' + CAST(10.00 AS varchar(1)) AS Result;

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

Isso é justo – se o SQL Server não pode converter os dados, você precisa saber!

No entanto, há outra maneira de fazê-lo.

A função TRY_CAST()


TRY_CAST() função funciona exatamente como CAST() exceto que, se os dados não puderem ser convertidos, ele retornará null (em vez de lançar um erro como CAST() faz):
SELECT 'Comments: ' + TRY_CAST(10.00 AS varchar(1)) AS Result;

Resultado:
Result
------
null

Isso pode ser útil se você quiser usar programação condicional para que o aplicativo execute uma tarefa diferente, dependendo se os dados podem ser convertidos ou não.

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

Resultado:
Result     
-----------
Cast failed

Tipos de dados inválidos


TRY_CAST() A função só funciona dessa maneira ao usar tipos de dados válidos. Portanto, você receberá um erro se fornecer explicitamente um tipo de dados que não é permitido.

Exemplo:
SELECT 'Comments: ' + TRY_CAST(10.00 AS Miami) AS Result;

Resultado:
Error: Type Miami is not a defined system type.