поиск даты в sql

#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. Привет, Мартин, если дата не существует, должно отображаться ‘Недопустимая дата’.