Si recibe el mensaje de error 241 de SQL Server que dice La conversión falló al convertir la fecha y/o la hora de la cadena de caracteres , probablemente se deba a que está intentando convertir una cadena en un valor de fecha/hora, pero esa cadena en particular no se puede convertir en un valor de fecha/hora.
Ejemplo de error
Aquí hay un ejemplo de código que produce el error:
SELECT CAST('Tomorrow' AS date);
Resultado:
Msg 241, Level 16, State 1, Line 1 Conversion failed when converting date and/or time from character string.
Aquí, tratamos de convertir la cadena Tomorrow
a la date
tipo, pero Tomorrow
no es una fecha válida que se pueda convertir en una date
tipo.
SQL Server no puede convertir la cadena en una date
y entonces devolvió un error.
Solución 1
La forma más obvia de solucionar esto es cambiar la cadena para que parezca una fecha real.
Si está pasando una columna, compruebe que tiene la columna correcta. Lo mismo si está pasando una variable:verifique que sea la variable correcta.
Por ejemplo, la siguiente conversión se realiza correctamente:
SELECT CAST('20 Feb 2030' AS date);
Resultado:
2030-02-20
Según el formato de la fecha de entrada, es mejor que utilices CONVERT()
para que pueda especificar el formato de la expresión de fecha de entrada.
Ejemplo:
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:
+-------------------+----------------------+------------------------+----------------------+ | US with century | US without century | British with century | US without century | |-------------------+----------------------+------------------------+----------------------| | 2030-03-02 | 2030-03-02 | 2030-02-03 | 2030-02-03 | +-------------------+----------------------+------------------------+----------------------+
Solución 2
Otra forma de lidiar con el error es usar TRY_CAST()
o TRY_CONVERT()
. Estas funciones devuelven NULL
en lugar del error.
Ejemplo:
SELECT TRY_CAST('Tomorrow' AS date);
Resultado:
NULL
Sin embargo, esto no aborda necesariamente el problema subyacente, simplemente lo oculta. La conversión aún no pudo llevarse a cabo.
En cualquier caso, puede seguir siendo una opción viable, dependiendo de tus necesidades.
Solución 3
Otra forma de lidiar con el error es convertir la cadena a un tipo de datos diferente. Obviamente, esto no es bueno si quieres terminar con una date
tipo, pero tal vez el error se produjo porque accidentalmente especificó date
tipo en lugar del otro tipo.
Ejemplo:
SELECT CAST('Wednesday' AS char(3));
Resultado:
Wed