TRY_CONVERT (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 da sintaxe Transact-SQL
Sintaxe
TRY_CONVERT ( data_type [ ( length ) ], expression [, style ] )
Argumentos
data_type [ ( length ) ]
O tipo de dados no qual converter expression.expression
O valor a ser convertido.style
Expressão de inteiro opcional que especifica como a função TRY_CONVERT deve ser convertida em expression.style aceita os mesmos valores do parâmetro style da função CONVERT. Para obter mais informações, consulte CAST e CONVERT (Transact-SQL).
O intervalo de valores aceitáveis é determinado pelo valor de data_type. Se style for nulo, TRY_CONVERT retornará nulo.
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_CONVERT obtém o valor transmitido a ele e tenta convertê-lo no data_type especificado. Se a conversão for bem-sucedida, TRY_CONVERT 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_CONVERT falhará com um erro.
TRY_CONVERT é uma nova palavra-chave no nível de compatibilidade 110.
Essa função é capaz de ser remota para servidores da versão SQL Server 2012 e posterior. Ela não será remota para servidores que têm uma versão anterior ao SQL Server 2012.
Exemplos
A.TRY_CONVERT retorna nulo
O exemplo a seguir demonstra que TRY_CONVERT retorna nulo quando a conversão falha.
SELECT
CASE WHEN TRY_CONVERT(float, 'test') 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_CONVERT(datetime2, '12/31/2010') AS Result;
GO
Aqui está o conjunto de resultados.
Result
----------------------
NULL
(1 row(s) affected)
B.TRY_CONVERT falha com um erro
O exemplo a seguir demonstra que TRY_CONVERT retorna um erro quando a conversão não é permitida explicitamente.
SELECT TRY_CONVERT(xml, 4) 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_CONVERT bem-sucedido
Este exemplo demonstra que a expressão deve estar no formato esperado.
SET DATEFORMAT mdy;
SELECT TRY_CONVERT(datetime2, '12/31/2010') AS Result;
GO
Aqui está o conjunto de resultados.
Result
----------------------------------
2010-12-31 00:00:00.0000000
(1 row(s) affected)