2017-01-09 3 views
5

Я вставляю инструкцию SQL в таблицу двумя датами, но использую ее на разных машинах с разными SQL Server и задаю язык. Иногда «2017-01-04 00:00:00» является 1 апреля 2017 иногда 4 января, 2017. Я хочу Апрель 01.Заявление на разных языках SQL Server с разными языками

INSERT INTO [table] ([id], [value], [datefrom], [dateto]) 
    SELECT 
     NEWID(), 3.5, '2017-01-04 00:00:00', '2027-01-05 00:00:00' 
    FROM 
     [settings] 

Могу ли я использовать просто использовать SET LANGUAGE german; в начале сценария и этот параметр является только временным для инструкции и не меняет язык навсегда? Или это не лучший способ? См. Приведенную ниже инструкцию. Заранее спасибо.

SET LANGUAGE german; 

INSERT INTO [table]([id], [value], [datefrom], [dateto]) 
    SELECT 
     NEWID(), 3.5, '2017-01-04 00:00:00', '2027-01-05 00:00:00' 
    FROM 
     [settings] 
+0

http://dba.stackexchange.com/a/39439/110455 – McNets

ответ

4

Если вам необходима поддержка нескольких языковых настроек, то лучше использовать (немного измененная) ISO-8601 формат для SQL Server даты-как-строка-литералы.

Если вам нужно использовать DATETIME (который должен быть прекращено по состоянию на SQL Server 2008 - использовать DATE, если вам нужно только дату, DATETIME2(n) если вам нужны обе даты & времени), используйте один из двух возможных форматов:

YYYYMMDD HH:MM:SS  // **NO** dashes for the date portion! 

или

YYYY-MM-DDTHH:MM:SS  // delimiter "T" between date and time parts 

Предпочтительно, если вы на самом деле только не нужна DATE (нет времени), используйте DATE тип данных, а затем использовать этот формат:

YYYYMMDD 

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

Таким образом 20170401 будет всегда быть истолковано как " 1 апреля 2017 года "

2

Вы можете использовать язык нейтральный (ODBC) буквальное, {d 'YYYYMMDD'} для даты и {ts'YYYY-MM-DD hh:mm:ss[.nnn]'} для DateTime.

Так

{ts '2017-04-01 00:00:00'} 

должен работать.

2

Команда SET LANGUAGE Работает на уровне сеанса, поэтому было бы решить вашу проблему видят MDSN Article on the command для специфических особенностей

Смежные вопросы