Определение функции без скобок?

Существует множество форматов, поддерживаемых SQL Server - см. электронную книгу в MSDN Books on CAST и CONVERT . Большинство этих форматов зависят от настроек, которые у вас есть, поэтому эти настройки могут работать несколько раз, а иногда и нет.

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

Формат ISO-8601 поддерживается SQL Server поставляется в двух вариантах :

  • YYYYMMDD только для дат (без временной доли); обратите внимание здесь: никаких тире !, это очень важно! YYYY-MM-DD НЕ является независимым от параметров dateformat на вашем SQL Server и не будет работать во всех ситуациях!

или:

  • YYYY-MM-DDTHH:MM:SS для дат и времена - обратите внимание: этот формат имеет тире (но они могут быть опущены ), а фиксированный T в качестве разделителя между датой и временем вашей DATETIME.

Это справедливо для SQL Server 2000 и новее.

Итак, в вашем конкретном случае - используйте следующие строки:

insert into table1 values('2012-02-21T18:10:00', '2012-01-01T00:00:00');

и вы должны быть в порядке (обратите внимание: для этого вам необходимо использовать международный 24-часовой формат, а не 12-часовой формат AM / PM).

Альтернативно: если вы находитесь на SQL Server 2008 или новее , вы также можете использовать тип данных DATETIME2 (вместо обычного DATETIME), и ваш текущий INSERT будет работать без проблем! :-) DATETIME2 намного лучше и намного менее придирчивы к конверсиям - и в любом случае рекомендуют типы данных даты и времени для SQL Server 2008 или новее.

SELECT
   CAST('02-21-2012 6:10:00 PM' AS DATETIME2),     -- works just fine
   CAST('01-01-2012 12:00:00 AM' AS DATETIME2)   -- works just fine  

Не спрашивайте меня почему эта целая тема настолько сложна и несколько запутанна - так оно и есть. Но в формате YYYYMMDD вы должны быть в порядке для любой версии SQL Server и для любого языка и параметра dateformat на вашем SQL Server.

11
задан martineau 18 June 2017 в 12:31
поделиться