Se você estiver recebendo a mensagem de erro 241 do SQL Server que diz Falha na conversão ao converter data e/ou hora da cadeia de caracteres , provavelmente é porque você está tentando converter uma string em um valor de data/hora, mas essa string específica não pode ser convertida em um valor de data/hora.
Exemplo de erro
Aqui está um exemplo de código que produz o erro:
SELECT CAST('Tomorrow' AS date);
Resultado:
Msg 241, Level 16, State 1, Line 1Falha na conversão ao converter data e/ou hora da string de caracteres.
Aqui, tentamos converter a string
Tomorrow
para a date
digite, mas Tomorrow
não é uma data válida que pode ser convertida em uma date
tipo. O SQL Server não pode converter a string em uma
date
e por isso retornou um erro. Solução 1
A maneira mais óbvia de corrigir isso é alterar a string para se parecer com uma data real.
Se você está passando uma coluna, verifique se você tem a coluna certa. O mesmo se você estiver passando uma variável - verifique se é a variável correta.
Por exemplo, a seguinte conversão é bem-sucedida:
SELECT CAST('20 Feb 2030' AS date);
Resultado:
2030-02-20
Dependendo do formato da data de entrada, talvez seja melhor usar o
CONVERT()
função, para que você possa especificar o formato da expressão de data de entrada. Exemplo:
SELECT
CONVERT(date, '03/02/2030', 101) AS 'US with century',
CONVERT(date, '03/02/30', 1) AS 'US without century',
CONVERT(date, '03/02/2030', 103) AS 'British with century',
CONVERT(date, '03/02/30', 3) AS 'US without century';
Resultado:
+-------------------+-----------------------+--- -----------+----------------------+| EUA com século | EUA sem século | Britânico com século | EUA sem século ||-------------------+----------------------+-- ------------------+----------------------|| 2030-03-02 | 2030-03-02 | 2030-02-03 | 2030-02-03 |+-------------------+----------------------+ ------------------------+----------------------+Solução 2
Outra maneira de lidar com o erro é usarTRY_CAST()
ouTRY_CONVERT()
. Essas funções retornamNULL
em vez do erro.
Exemplo:
SELECT TRY_CAST('Tomorrow' AS date);
Resultado:
NULO
No entanto, isso não aborda necessariamente o problema subjacente, apenas o oculta. A conversão ainda não pôde ocorrer.
De qualquer forma, ainda pode ser uma opção viável, dependendo das suas necessidades.
Solução 3
Outra maneira de lidar com o erro é converter a string em um tipo de dados diferente. Obviamente, isso não é bom se você quiser terminar com umadate
type, mas talvez o erro tenha ocorrido porque você especificou acidentalmentedate
tipo em vez do outro tipo.
Exemplo:
SELECT CAST('Wednesday' AS char(3));
Resultado:
Qua