Правильный способ указания данной даты в T-SQL - PullRequest
6 голосов
/ 15 декабря 2011

Я пишу некоторый T-SQL, которому необходимо ввести минимальное значение даты в некоторых пустых полях:

DECLARE @epoch DATETIME;
set @epoch='1900-01-01';
select min = ISNULL(ValidFromDate,@epoch)

Всегда ли строка '1900-01-01' возвращает дату и время января1 1900 в любой среде, или SQL-сервер попытается проанализировать строку в соответствии с местными правилами культуры?

Если этого недостаточно, каков рекомендуемый способ указания конкретной даты / времени в T-SQL?

1 Ответ

12 голосов
/ 15 декабря 2011

Наилучшим форматом для строковых дат является стандартный формат ISO-8601 .

Для DATETIME переменных и столбцов это либо YYYYMMDD (для дат без времени; без тире!) Или YYYY-MM-DDTHH:MM:SS (дата + время).

Вопреки распространенному мнению, YYYY-MM-DD для DATETIME переменных НЕ не зависит от языка / даты! Если вы попробуете это, второй CAST приведет к ошибке:

SET LANGUAGE us_english
SELECT CAST('2011-07-20' AS DATETIME)

SET LANGUAGE british
SELECT CAST('2011-07-20' AS DATETIME)

но это будет работать:

SET LANGUAGE british
SELECT CAST('20110720' AS DATETIME)

Это лучший формат, поскольку он не зависит от настроек языка и даты в SQL Server.

Для SQL Server 2008 и столбцов типа DATE (только дата - без времени) формат также может быть YYYY-MM-DD (с тире), что также работает для всех настроек.

Почему такая разница между DATE и DATETIME мне не под силу - это так, как сейчас!

См. Превосходное руководство Тибора Караси Окончательное руководство по типам данных DateTime для получения более подробной информации и примеров.

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