Запрос определенного временного диапазона в SQL Server

Я пытаюсь запросить определенный диапазон времени:

  • то есть. 3/1/2009 - 3/31/2009
  • между 6 AM-10PM каждый день
  • Только Вт/Ср/Чт

Я видел, что вы можете получать данные для определенного диапазона, но только для начала и конца, и это довольно немного конкретнее. Я не видел каких-либо команд SQL Server, которые напрямую помогли бы мне в этом, так и у кого-нибудь еще есть мысли о том, как вы это сформировали?

Я видел этот, но я не думаю, что он достаточно специфичен для этого диапазона.

Спасибо!

Ответы

Ответ 1

Я предполагаю, что вы хотите, чтобы все три из них были частью критериев отбора. Вам понадобятся несколько утверждений в вашем месте, но они будут похожи на ссылку, содержащую ваш вопрос.

SELECT *
  FROM MyTable
  WHERE [dateColumn] > '3/1/2009' AND [dateColumn] <= DATEADD(day,1,'3/31/2009') 
        --make it inclusive for a datetime type
    AND DATEPART(hh,[dateColumn]) >= 6 AND DATEPART(hh,[dateColumn]) <= 22 
        -- gets the hour of the day from the datetime
    AND DATEPART(dw,[dateColumn]) >= 3 AND DATEPART(dw,[dateColumn]) <= 5 
        -- gets the day of the week from the datetime

Надеюсь, что это поможет.

Ответ 2

вы можете попробовать это (у меня нет сервера sql здесь сегодня, поэтому я не могу проверить синтаксис, извините)

select attributeName
  from tableName
 where CONVERT(varchar,attributeName,101) BETWEEN '03/01/2009' AND '03/31/2009'
   and CONVERT(varchar, attributeName,108) BETWEEN '06:00:00' AND '22:00:00'
   and DATEPART(day,attributeName) BETWEEN 2 AND 4

Ответ 3

select * from table where 
(dtColumn between #3/1/2009# and #3/31/2009#) and 
(hour(dtColumn) between 6 and 22) and 
(weekday(dtColumn, 1) between 2 and 4) 

Ответ 4

I (используя PostgrSQL на PGadmin4) запрашивается для результатов, которые появляются после или 21 ноября 2017 года в полдень, как это (учитывая формат отображения часов в моей базе данных):

select * from Table1 where FIELD >='2017-11-21 12:00:00'