No SQL Server, o
TRY_CONVERT()
função é muito semelhante ao CONVERT()
função, exceto que TRY_CONVERT()
não retorna um erro se a conversão falhar (CONVERT()
faz). Em vez disso, o
TRY_CONVERT()
função retorna NULL
se a conversão não for bem-sucedida. No entanto, existem algumas ocasiões em que
TRY_CONVERT()
retornará um erro. Sintaxe
A sintaxe fica assim:
TRY_CONVERT ( data_type [ ( length ) ], expression [, style ] )
Onde
expression
é a expressão a ser convertida, data_type
é o novo tipo de dados e length
é um comprimento opcional para o novo tipo de dados. O
style
opcional argumento pode ser usado para especificar como a função deve traduzir a expression
argumento. Por exemplo, você pode usar esse argumento para especificar o formato de data. Exemplo 1 – Conversão bem-sucedida
Aqui está um exemplo de conversão de uma string para decimal:
SELECT TRY_CONVERT(DECIMAL(5,2), '007');
Resultado:
7.00
Nesse caso, a conversão foi bem-sucedida.
Exemplo 2 – A conversão falha e retorna NULL
Aqui está um exemplo de falha na conversão e
NULL
sendo devolvido:SELECT TRY_CONVERT(DECIMAL(5,2), 'Three');
Resultado:
NULL
A conversão falhou e, portanto,
NULL
foi devolvido. Como comparação, aqui está o que acontece quando usamos
CONVERT()
em vez de TRY_CONVERT()
:SELECT CONVERT(DECIMAL(5,2), 'Three');
Resultado:
Msg 8114, Level 16, State 5, Line 1 Error converting data type varchar to numeric.
Exemplo 3 – A conversão falha e retorna um erro
Existem algumas ocasiões em que
TRY_CONVERT()
retornará um erro. Se uma conversão não for explicitamente permitida, ela retornará um erro:
SELECT TRY_CONVERT(xml, 10);
Resultado:
Msg 529, Level 16, State 2, Line 1 Explicit conversion from data type int to xml is not allowed.
Exemplo 4 – O style
Argumento
Podemos usar o
style
opcional argumento para especificar como a expressão deve ser traduzida. Exemplo:
SET LANGUAGE British;
SELECT
TRY_CONVERT(date, '09/02/2030') AS "British",
TRY_CONVERT(date, '09/02/2030', 101) AS "US",
TRY_CONVERT(date, '09/02/30', 1) AS "US (short)",
TRY_CONVERT(date, '20300902', 112) AS "ISO",
TRY_CONVERT(date, '09.02.2030', 104) AS "German";
Resultado:
Changed language setting to British. +------------+------------+--------------+------------+------------+ | British | US | US (short) | ISO | German | |------------+------------+--------------+------------+------------| | 2030-02-09 | 2030-09-02 | 2030-09-02 | 2030-09-02 | 2030-02-09 | +------------+------------+--------------+------------+------------+
Aqui, defino meu idioma para
British
, então executou TRY_CONVERT()
várias vezes, cada uma usando um style
diferente argumento (exceto o primeiro, que usa o idioma padrão da minha sessão – britânico). Podemos ver que o argumento de estilo afeta como a expressão é traduzida.
Mais informações
Veja
CONVERT()
no SQL Server para mais exemplos de conversão e CONVERT()
vs TRY_CONVERT()
no SQL Server para uma comparação entre CONVERT()
e TRY_CONVERT()
. Consulte a documentação da Microsoft para
CAST()
e CONVERT()
para informações mais detalhadas (a maioria também se aplica a TRY_CONVERT()
).