sql >> Base de Datos >  >> RDS >> Sqlserver

¿El formato de fecha de SQL Server depende del usuario?

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