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

CONVERT() vs TRY_CONVERT no SQL Server:Qual é a diferença?


Você deve ter notado que o T-SQL inclui um CONVERT() função e um TRY_CONVERT() função que você pode usar no SQL Server para realizar conversões entre tipos de dados. Mas se você está coçando a cabeça sobre qual é a diferença entre essas duas funções, continue lendo!

A diferença entre CONVERT() e TRY_CONVERT() está na maneira como eles lidam com tipos de dados que não podem ser convertidos. Um lança um erro, enquanto o outro retorna null. Os exemplos a seguir demonstram isso.


A função CONVERT()


Primeiro, vamos ver o que CONVERT() função faz. Ele converte um tipo de dados em outro. Aqui está um exemplo:
SELECT 'Comments: ' + CONVERT(varchar(12), 9) AS Result;

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

Neste exemplo, convertemos um int valor para varchar(12) . E como o valor pôde ser convertido em nosso tipo e comprimento de dados desejados, isso funcionou perfeitamente.

No entanto, enquanto isso funciona perfeitamente quando a conversão é bem-sucedida, o que acontece quando ela falha?

Quando a conversão falha → Erro


Vamos ajustar o código um pouco e ver o que acontece quando a conversão falha:
SELECT 'Comments: ' + CONVERT(varchar(1), 10.00) AS Result;

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

Recebemos um erro.

A função TRY_CONVERT()


TRY_CONVERT() é uma alternativa que podemos usar para evitar a mensagem de erro. Esta função executa a mesma operação de conversão de dados que CONVERT() , no entanto, se esta função não puder realizar a conversão, ela retornará null :
SELECT 'Comments: ' + TRY_CONVERT(varchar(1), 10.00) AS Result;

Resultado:
Result
------
null

Você pode pegar esse resultado e aplicar o código condicional para que uma coisa diferente aconteça dependendo se a conversão for bem-sucedida ou não.

Exemplo:
SELECT   
    CASE WHEN TRY_CONVERT(varchar(1), 10.00) IS NULL   
    THEN 'Conversion failed'  
    ELSE 'Conversion succeeded'  
END AS Result;

Resultado:
Result           
-----------------
Conversion failed

Tipos de dados inválidos


Uma ressalva com TRY_CONVERT() é que ele 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_CONVERT(Homer, 10.00) AS Result;

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