Функция DATEADD () для поиска значений в этот рабочий день - PullRequest
0 голосов
/ 19 июля 2011

Как я могу использовать функцию SQL DATEADD (), чтобы найти запись за этот рабочий день? Например:

SELECT * FROM records r
WHERE r.creationTime <= GETDATE()
  AND r.creationTime >= DATEADD(dd, -1 * hoursFromStartOfThisDay, GETDATE())

Где 'hoursFromStartOfThisDay' - именно то, что написано.

Примечание: я говорю о рабочих днях, поэтому с 9:00 до 17:00, с понедельника по пятницу, если это вообще имеет значение.

Спасибо, ребята!

Редактировать: я также ищу применение решения для начала недели / месяца и, возможно, часа.

Редактировать: поэтому, если запись была создана 18/07/2011 08:55:00, а другая - 18/07/2011 09:05:00, я хочу, чтобы вторая запись была выбрана запросом и не первый. Однако, если текущая функция GETDATE () - 18/07/2011 09:15:00, она становится хитрой.

как насчет добавления AND r.creationTime >= '9am'?

1 Ответ

1 голос
/ 19 июля 2011

Вам действительно нужна переменная hoursFromStartOfThisDay?Если ваш день статический, с 9 до 5, вы можете использовать только этот статический диапазон:

-- cache current date to avoid multiple calls
DECLARE @startOfADay INT
DECLARE @dayLength INT
DECLARE @currentDate DATETIME
SET @currentDate = DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))
SET @startOfADay = 9
SET @dayLength = 8

SELECT 
   ...
FROM
   ...
WHERE ...
BETWEEN 
      DATEADD(hh, @startOfADay, @currentDate) 
      AND 
      DATEADD(hh, @startOfADay + @dayLength, @currentDate)
...