Вы используете разные форматы для строки, тогда вы можете избежать этого.
Существует 2 формата iso, которые всегда специфичны - сервер sql всегда будет анализировать их одинаково независимо от настройки формата даты сервера.
К ним относятся:
1) Краткая форма: ГГГГММДД.Пример «20120301» - 1 марта 2012 года
2) Длинная форма: ГГГГ-ММ-ДДАТЬ: ММ: SS.msms '. Пример '2012-03-01T12: 13: 00.000Z' - 1 марта 2012 года в 13 минут 12 (PM)
В длинной форме miliseconds не является обязательным - это идеально подходит для даты и времени ISO '2012- 03-01T12: 13: 00Z '
Z в конце - информация о часовом поясе. SQL Server фактически не требует этого. (Хотя другие продукты являются немного более требовательным)
Попробуйте это, например:
DECLARE @foo DATETIME
SET DATEFORMAT DMY
-- this will be the 3rd of january in DMY
SET @foo = '2012-03-01'
SELECT 'DMY: Not ISO', @foo
SET @foo = '20120301'
SELECT 'DMY: ISO', @foo
SET DATEFORMAT MDY
-- this will be the 1st of March in MDY
SET @foo = '2012-03-01'
SELECT 'MDY: not ISO', @foo
SET @foo = '20120301'
SELECT 'MDY: ISO', @foo
При использовании текста для ввода даты вы должны всегда пытаетесь использовать один из двух стандартов ISO. Это просто делает вещи намного более детерминированными.
Краткий формат (SQL Server) http://msdn.microsoft.com/en-US/library/ms187085(v=sql.90).aspx
ISO 8601 Формат (SQL Server) http://msdn.microsoft.com/en-us/library/ms190977(v=sql.90).aspx
Ответ есть http://stackoverflow.com/questions/17491459/how-can-i- get-sql-server-to-use-user-locale-for-date-format-for-a-query –