Om du behöver ange datum och tider med hjälp av strängar bör du använda ett safe , språkoberoende format.
I SQL Server är det ISO-8601-formatet (något anpassat), och det stöder i princip två säkra format för DATETIME
som alltid fungerar - oavsett inställningar för språk, region och datumformat:
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)
Obs:
-
det första formatet endast för datum har inga bindestreck eller avgränsare!
-
det andra formatet har streck för datumet (kan också utelämnas), och det finns en fast
T
som avgränsare mellan datumet och tidsdelen av strängen
Uppdatering: enligt din senaste kommentar (om de olika standardspråken för de två användarna) - prova detta:
-- this is how your `SA` interprets the string as datetime....
SET LANGUAGE english
SELECT CAST('2012-11-30 23:59' AS DATETIME)
Fungerar bra...
-- this is how your British user interprets teh string as datetime
SET LANGUAGE british
SELECT CAST('2012-11-30 23:59' AS DATETIME)
Detta försöker tolka strängen som 11:e av den 30:e månaden 2012 och uppenbarligen misslyckas det...