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