No SQL Server, o
PARSE()
e TRY_PARSE()
funções são usadas para traduzir um valor em outro tipo de dados. Eles essencialmente fazem a mesma coisa, com uma exceção; como eles lidam com os erros. Se
PARSE()
falhar ao tentar analisar um tipo de dados diferente, ele retornará um erro. Se TRY_PARSE()
falhar, ele retornará NULL
. Exemplo 1 – Primeiro, as semelhanças
Aqui está um exemplo que demonstra como ambas as funções retornam o mesmo resultado quando podem analisar com sucesso o valor para o tipo de dados necessário:
SELECT PARSE('Fri, 8 June 2018' AS date) AS PARSE, PARSE('Fri, 8 June 2018' AS date) AS TRY_PARSE;
Resultado:
+------------+-------------+ | PARSE | TRY_PARSE | |------------+-------------| | 2018-06-08 | 2018-06-08 | +------------+-------------+
Como esperado, ambos retornam exatamente o mesmo resultado.
Mas vamos ver o que acontece quando eles não conseguem analisar o valor para o tipo de dados necessário.
Exemplo 2 – Quando PARSE() falha
Veja um exemplo do que acontece quando
PARSE()
é incapaz de analisar um valor para outro valor:SELECT PARSE('Next year' AS date) AS Result;
Resultado:
Error converting string value 'Next year' into data type date using culture ''.
A operação falha porque não forneci uma representação válida do tipo de dados solicitado. Em outras palavras,
PARSE()
não é possível converter Next year
em uma data tipo de dados conforme solicitado. Exemplo 3 – Quando TRY_PARSE() falha
Veja um exemplo quando tentamos analisar o mesmo valor com
TRY_PARSE()
:SELECT TRY_PARSE('Next year' AS date) AS Result;
Resultado:
+----------+ | Result | |----------| | NULL | +----------+
A análise ainda falha, mas retorna
NULL
em vez de um erro. Exemplo 4 – Usando TRY_PARSE() com uma instrução condicional
Podemos usar
TRY_PARSE()
e teste seu valor de retorno. Se for um valor NULL, podemos retornar uma coisa, se for um valor não NULL, podemos retornar outra:SELECT CASE WHEN TRY_PARSE('Next year' AS date) IS NULL THEN 'Conversion failed' ELSE 'Conversion succeeded' END AS Result;
Resultado:
+-------------------+ | Result | |-------------------| | Conversion failed | +-------------------+
Exemplo 5 – TRY_PARSE() com erro
Só porque
TRY_PARSE()
não resulta em erro nos exemplos acima, isso não significa que nunca resulta em erro. Há momentos em que você ainda pode obter um erro ao usar esta função. Por exemplo, você receberá um erro se fornecer um valor inválido como
culture
argumento:SELECT TRY_PARSE('Next year' AS date USING 'Mars') AS Result;
Resultado:
The culture parameter 'Mars' provided in the function call is not supported.
Algumas notas sobre essas funções
Aqui estão alguns pontos que a Microsoft tem a dizer sobre essas funções:
- Recomenda-se usar
PARSE()
eTRY_PARSE()
apenas para converter de string para data/hora e tipos numéricos. Para outros tipos de dados, useCAST()
ouCONVERT()
. - Essas funções contam com a presença do .the .NET Framework Common Language Runtime (CLR).
- Há uma certa sobrecarga de desempenho na análise do valor da string.
- Essas funções não serão remotas, pois dependem da presença do CLR. Tentar remotamente uma função que requer o CLR causaria um erro no servidor remoto.