Какой канонический способ создать дату из трех чисел, представляющих дни, месяцы и годы? - PullRequest
1 голос
/ 05 февраля 2009

У меня год 2009, месяц 11 и день 12. Все они передаются мне как целые числа. Что я хочу сделать, это создать дату из них. Я хочу использовать их как часть моего утверждения where.

Каков наилучший способ сделать это с чистого кода и, что наиболее важно, с точки зрения скорости?

Я лично использую MS SQL, который, я уверен, изменит ситуацию.

Заранее спасибо,

Alex.

Ответы [ 4 ]

5 голосов
/ 05 февраля 2009

Наиболее однозначными форматами, использующими только целые числа, являются YYYYMMDD, YYYY-MM-DD и YYYY/MM/DD. Я не могу говорить с MSSQL конкретно, но по моему опыту, YYYY-MM-DD поддерживается наиболее универсально (в немалой степени благодаря тому, что он является частью ISO 8601 стандарта ).

2 голосов
/ 05 февраля 2009

Предполагая, что ваши INT s называются @d, @m и @y:

DATEADD(month, ((@y - 1900) * 12) + @m - 1, @d - 1)

EDIT

Обратите внимание, что этот метод никоим образом не является "каноническим", он основан на манипулировании реализацией DATETIME.

в SQL Server.

Если вы передадите недопустимые значения для @d, @m или @y, вы получите недействительный DATETIME в ответ:

  • {@ y = 2009, @ m = 11, @ d = 12} возвращает 2009-11-12 (правильно)
  • {@ y = 2009, @ m = 11, @ d = 50} возвращает 2009-12-19 (неверно)
  • {@ y = 2009, @ m = 13, @ d = 12} возвращает 2010-01-12 (неверно)
0 голосов
/ 05 февраля 2009

Как уже упоминал Бен yyyy-mm-dd (стандарт ANSI), это довольно безопасная ставка, поскольку она не так неоднозначна, как dd mm yyyy или mm dd yyyy. SQL Server с радостью преобразует varchar, переданный в этом формате, в дату.

0 голосов
/ 05 февраля 2009

Вы говорите о том, чтобы объединить их для хранения в базе данных или вы сохранили их таким образом и хотите объединить их в запросе и преобразовать в dte для использования математических функций даты?

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