Ако трябва да посочите дати и часове с помощта на низове, трябва да използвате safe , независим от езика формат.
В SQL Server това е форматът ISO-8601 (леко адаптиран) и поддържа основно два безопасни формата за DATETIME
които винаги работят - независимо от вашите настройки за език, регион и формат на дата:
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)
Забележка:
-
първият формат само за дата няма без тирета или разделители!
-
вторият формат има тирета за датата (също могат да бъдат пропуснати) и има фиксирано
T
като разделител между частта от датата и часа на низа
Актуализация: според последния ви коментар (за различните езици по подразбиране за двамата потребители) - опитайте това:
-- this is how your `SA` interprets the string as datetime....
SET LANGUAGE english
SELECT CAST('2012-11-30 23:59' AS DATETIME)
Работи добре...
-- this is how your British user interprets teh string as datetime
SET LANGUAGE british
SELECT CAST('2012-11-30 23:59' AS DATETIME)
Това се опитва да интерпретира низа като 11-ти от 30-ия месец на 2012 г. и очевидно това се проваля...