TRY_CAST (Transact-SQL)
Retorna uma conversão de valor ao tipo de dados especificado se a conversão for bem-sucedida; caso contrário, retorna nulo.
Convenções de sintaxe Transact-SQL
Sintaxe
TRY_CAST ( expression AS data_type [ ( length ) ] )
Argumentos
- expression
O valor a ser convertido. Qualquer expressão válida.
data_type
O tipo de dados no qual converter expression.length
Inteiro opcional que especifica o comprimento do tipo de dados de destino.O intervalo de valores aceitáveis é determinado pelo valor de data_type.
Tipos de retorno
Retorna uma conversão de valor ao tipo de dados especificado se a conversão for bem-sucedida; caso contrário, retorna nulo.
Comentários
TRY_CAST obtém o valor transmitido a ele e tenta convertê-lo no data_type especificado. Se a conversão for bem-sucedida, TRY_CAST retornará o valor como o data_typeespecificado; se um erro ocorrer, nulo será retornado. Porém, se você solicitar uma conversão que não é permitida explicitamente, TRY_CAST falhará com um erro.
TRY_CAST não é uma nova palavra-chave reservada e está disponível em todos os níveis de compatibilidade. TRY_CAST tem a mesma semântica que TRY_CONVERT ao se conectar a servidores remotos.
Exemplos
A.TRY_CAST retorna nulo
O exemplo a seguir demonstra que TRY_CAST retorna nulo quando a conversão falha.
SELECT
CASE WHEN TRY_CAST('test' AS float) IS NULL
THEN 'Cast failed'
ELSE 'Cast succeeded'
END AS Result;
GO
Aqui está o conjunto de resultados.
Result
------------
Cast failed
(1 row(s) affected)
O exemplo a seguir demonstra que a expressão deve estar no formato esperado.
SET DATEFORMAT dmy;
SELECT TRY_CAST('12/31/2010' AS datetime2) AS Result;
GO
Aqui está o conjunto de resultados.
Result
----------------------
NULL
(1 row(s) affected)
B.TRY_CAST falha com um erro
O exemplo a seguir demonstra que TRY_CAST retorna um erro quando a conversão não é permitida explicitamente.
SELECT TRY_CAST(4 AS xml) AS Result;
GO
O resultado dessa instrução é um erro, porque um inteiro não pode ser convertido em um tipo de dados XML.
Explicit conversion from data type int to xml is not allowed.
C.TRY_CAST tem êxito
Este exemplo demonstra que a expressão deve estar no formato esperado.
SET DATEFORMAT mdy;
SELECT TRY_CAST('12/31/2010' AS datetime2) AS Result;
GO
Aqui está o conjunto de resultados.
Result
----------------------------------
2010-12-31 00:00:00.0000000
(1 row(s) affected)