Si necesita especificar fechas y horas usando cadenas, debe usar un seguro , formato independiente del idioma.
En SQL Server, ese es el formato ISO-8601 (ligeramente adaptado) y admite básicamente dos formatos seguros para DATETIME
que siempre funcionan, independientemente de su configuración de idioma, región y formato de fecha:
YYYYMMDD (e.g. 20121231 for 31st of December 2012) if you need date only
YYYY-MM-DDTHH:mm:ss (e.g. 2012-12-31T21:05:00 for 31st of December 2012, 9:05pm)
Nota:
-
el primer formato de solo fecha tiene sin guiones o delimitadores!
-
el segundo formato tiene guiones para la fecha (también se puede omitir) y hay una
T
fija como delimitador entre la fecha y la parte de la hora de la cadena
Actualización: según su último comentario (sobre los diferentes idiomas predeterminados para los dos usuarios), intente esto:
-- this is how your `SA` interprets the string as datetime....
SET LANGUAGE english
SELECT CAST('2012-11-30 23:59' AS DATETIME)
Funciona bien...
-- this is how your British user interprets teh string as datetime
SET LANGUAGE british
SELECT CAST('2012-11-30 23:59' AS DATETIME)
Esto intenta interpretar la cadena como 11 del mes 30 de 2012 y obviamente, eso falla....