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()
O
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.