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