Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Data do SQL Server Formato dependente do usuário?


Se você precisar especificar datas usando strings, você deve usar um seguro , formato independente de idioma.

No SQL Server, esse é o formato ISO-8601 (ligeiramente adaptado) e suporta basicamente dois formatos seguros para DATETIME que sempre funcionam - independentemente do seu idioma, configurações regionais e formato de data:
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)

Observação:

  • o primeiro formato somente de data tem sem traços ou delimitadores!

  • o segundo formato tem traços para a data (pode ser omitido também), e há um T fixo como delimitador entre a parte de data e hora da string

Atualização: de acordo com seu último comentário (nos diferentes idiomas padrão para os dois usuários) - tente isto:
-- this is how your `SA` interprets the string as datetime....
SET LANGUAGE english
SELECT CAST('2012-11-30 23:59' AS DATETIME)   

Funciona direitinho...
-- this is how your British user interprets teh string as datetime
SET LANGUAGE british
SELECT CAST('2012-11-30 23:59' AS DATETIME)

Isso tenta interpretar a string como 11º do 30º mês de 2012 e obviamente, isso falha ....