SQL Date Format День и месяц Смешивание - PullRequest
2 голосов
/ 14 апреля 2011

Кажется, этот вопрос задают много, но ни один из ответов не дал мне результатов. Я дергаю себя за волосы ... надеюсь, у кого-то есть ответ.

У меня есть рабочий сервер под управлением SQL Server 2005. Я создал резервную копию базы данных и восстановил ее на экземпляре SQL Server Express моего ноутбука. Теперь даты запросов серьезно пострадали. В прод. На сервере все они хранятся в формате «13.04.2011, 12:00:00», но на моем ноутбуке они отображаются как «2011-04-14 00: 00: 00.000». Когда я выполняю запрос, пытаясь найти записи «14.04.2011», мой ноутбук выдает ошибку « Преобразование типа данных varchar в тип данных datetime привело к значению вне допустимого диапазона ». Редактировать : Этот точный запрос отлично работает на производственном сервере SQL. (Я использую SSMS для выполнения запросов ... не приложение / код)

Я убедился, что региональные настройки Windows на моем ноутбуке совпадают с настройками сервера (английский (США)), и все на панели управления «Регион и язык» точно такое же.

Наконец я выполнил следующие два запроса:

select name ,alias, dateformat
  from syslanguages
     where langid =
      (select value from master..sysconfigures
         where comment = 'default language')

select @@language

Что дало результат "* us_english, English, mdy *" ..... и " British " соответственно. Откуда этот британец? Теперь, когда я запускаю эту команду перед моим запросом (в студии управления)

SET DATEFORMAT mdy

Тогда все работает отлично! Но в запросе syslanguages ​​это, кажется, уже формат mdy. Я не собираюсь переписывать мое приложение "SET DATEFORMAT" повсеместно - так что, надеюсь, у кого-то есть подсказка. Может быть, моя установка SQL Express прервана, и я должен переустановить ее?

Я буду продолжать возиться с надеждой заставить это работать.

Ответы [ 3 ]

2 голосов
/ 14 апреля 2011

Это языковые настройки для логина , которые необходимо изменить.

Вы можете сделать это через SSMS -> Security -> Logins -> YourLogin -> Properties -> Default Language

Или через TSQL

ALTER LOGIN [YourLogin] WITH  DEFAULT_LANGUAGE=[us_english]
0 голосов
/ 14 апреля 2011

Вы передаете даты в виде строковых литералов - или объединяете строки для создания SQL в вашем приложении?

Если вы делаете это, рассмотрите возможность использования параметров для типов данных dateTime. Или, по крайней мере, избегайте их с помощью escape-предложения ODBC и форматируйте их как в {ts'yyyy-mm-ddhh: mm: ss [.fff] '}, например: {ts'1998-09-24 10:02:20' }.

Скорее всего, ваше приложение неправильно передает дату и время.

0 голосов
/ 14 апреля 2011

Если вы укажете вещи в формате dd-mmm-yyyy или, что еще лучше, используете параметры DateTime (вместо ввода varchar), у вас не возникнет проблем.

Попробуйте изменить язык по умолчанию на us-english, используя следующее:

EXEC sp_configure 'default language', 1033
RECONFIGURE

Если это не сработает, вы можете попробовать код языка 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...