Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como TRY_CONVERT() funciona no SQL Server


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