#sql #sql-server-2005
#sql #sql-server-2005
Вопрос:
У меня есть следующая таблица событий календаря курса (для простоты в ней показано всего несколько записей):
calendarItemID classID startDate startTime endTime
----------------------------------------------------------
1 1 2011-11-24 7pm 9pm
2 2 2011-11-02 7pm 9pm
3 1 2011-11-25 7pm 9pm
Мне нужен запрос, который возвращает курсы за ПРЕДСТОЯЩИЙ КВАРТАЛ (не за текущий квартал). Существует ли функция SQL, которая может помочь и / или это тот случай, когда нужно вычислить даты в текущем квартале и посмотреть, соответствует ли StartDate этим датам. Я ищу наиболее элегантный способ, если это возможно.
Заранее спасибо! Пол
Ответ №1:
Простой, но медленный подход :
WHERE DATEPART(qq,startDate) = DATEADD(qq, 1,GETDATE()) AND YEAR(startDate) =
YEAR(DATEADD(qq, 1,GETDATE()))
Под медленным я подразумеваю, что даже если у вас есть индекс (StartDate), он не будет использоваться.
Лучшим решением является получение start_date и end_date для следующего квартала. Я вижу несколько способов сделать это. Например, вы можете создать 2 скалярных UDF, которые возвращают start_date и end_date соответственно. Вы также можете создать 1 табличную функцию, которая возвращает 1 строку с 2 столбцами, а затем объединить ее. Наконец, вы можете просто создать справочную таблицу и вручную ввести дату начала / окончания на следующие пару лет.
Комментарии:
1. Круто, я использовал опцию UDF, возвращающую даты начала и окончания, остальное было просто. Приветствия!
Ответ №2:
Создайте таблицу с именем, скажем, Quarters, с полезным идентификатором, скажем, YYYYQQ, и датой начала и окончания, затем это простое объединение.