#sql-server
#sql-сервер
Вопрос:
мне нужен запрос для поиска даты на основе года, месяца, дня недели и номера дня недели. Скажем, например, если вопрос заключается в том, чтобы найти дату 2-го воскресенья января 2010 года, ответ должен быть ‘2010-01-10’.
Входные данные являются
Yr | Mon | Dy | Dyno
-----------------------
2010 | Jan | Sun | 2
2005 | Jan | Mon | 3
1995 | Feb | Sun | 1
2000 | Feb | Wed | 4
1982 | Mar | Tue | 2
2010 | Mar | Tue | 8
Dyno заявляет, что dayno
Комментарии:
1. Что означает последняя строка входных данных? Вы хотите 8-й вторник марта 2010? Очевидно, что ее не было.
2. Похоже, что это, вероятно, делает примерно то, что вам нужно, хотя weblogs.sqlteam.com/peterl/archive/2009/06/17 /…
Ответ №1:
Самый простой ответ на многие вопросы, связанные с датами в SQL, — это создать таблицу календаря. В вашем случае, если вы создадите таблицу с уже показанными вами столбцами и дополнительным столбцом с DATETIME
нужным значением (назовите его BaseDate
), вы можете получить нужное вам значение с помощью простого запроса:
select BaseDate
from dbo.Calendar
where Yr = 2010 and Mon = 'Jan' and Dy = 'Sunday' and Dyno = 2
Конечно, ваша таблица календаря может содержать 10, 20 или более столбцов, в зависимости от того, какие значения вы считаете полезными для своих запросов.
Комментарии:
1. Привет, Мартин, если дата не существует, должно отображаться ‘Недопустимая дата’.