Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Data di SQL Server Formato dipendente dall'utente?

Se devi specificare datetime usando stringhe, dovresti usare una cassaforte , formato indipendente dalla lingua.

In SQL Server, questo è il formato ISO-8601 (leggermente adattato) e supporta fondamentalmente due formati sicuri per DATETIME che funzionano sempre, indipendentemente dalla lingua, dalle impostazioni regionali e dal formato della 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)

Nota:

  • il primo formato di sola data ha nessun trattino o delimitatori!

  • il secondo formato ha dei trattini per la data (può anche essere omesso) e c'è una T fissa come delimitatore tra la parte della data e quella dell'ora della stringa

Aggiornamento: secondo il tuo ultimo commento (sulle diverse lingue predefinite per i due utenti) - prova questo:

-- this is how your `SA` interprets the string as datetime....
SET LANGUAGE english
SELECT CAST('2012-11-30 23:59' AS DATETIME)   

Funziona bene...

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

Questo tenta di interpretare la stringa come 11° del 30° mese del 2012 e ovviamente fallisce...