Как исключить выходные дни в запросе SQL Server? - PullRequest
54 голосов
/ 26 ноября 2009

Как исключить значения в столбце DateTime, которые являются субботами или воскресеньями?

Например, с учетом следующих данных:

date_created
'2009-11-26 09:00:00'  -- Thursday
'2009-11-27 09:00:00'  -- Friday
'2009-11-28 09:00:00'  -- Saturday
'2009-11-29 09:00:00'  -- Sunday
'2009-11-30 09:00:00'  -- Monday

вот результат, который я ищу:

date_created
'2009-11-26 09:00:00'  -- Thursday
'2009-11-27 09:00:00'  -- Friday
'2009-11-30 09:00:00'  -- Monday

Спасибо!

Ответы [ 7 ]

113 голосов
/ 26 ноября 2009

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

SELECT *
FROM your_table
WHERE ((DATEPART(dw, date_created) + @@DATEFIRST) % 7) NOT IN (0, 1)
17 голосов
/ 26 ноября 2009
SELECT date_created
FROM your_table
WHERE DATENAME(dw, date_created) NOT IN ('Saturday', 'Sunday')
11 голосов
/ 26 ноября 2009

Если вы используете SQL Server, используйте DATEPART с dw:

SELECT date_created
FROM your_table
WHERE DATEPART(dw, date_created) NOT IN (1, 7);

РЕДАКТИРОВАНИЕ: Следует отметить, что фактическое числовое значение, возвращаемое DATEPART (dw), определяется значением, установленным с помощью SET DATEFIRST:
http://msdn.microsoft.com/en-us/library/ms181598.aspx

8 голосов
/ 26 ноября 2009

Попробуйте функцию DATENAME():

select [date_created]
from table
where DATENAME(WEEKDAY, [date_created]) <> 'Saturday'
  and DATENAME(WEEKDAY, [date_created]) <> 'Sunday'
2 голосов
/ 26 ноября 2009

Ответ зависит от настройки недельного запуска вашего сервера, поэтому либо

SELECT [date_created] FROM table WHERE DATEPART(w,[date_created]) NOT IN (7,1)

если воскресенье - первый день недели для вашего сервера

или

SELECT [date_created] FROM table WHERE DATEPART(w,[date_created]) NOT IN (6,7)

если понедельник - первый день недели для вашего сервера

Прокомментируйте, если у вас есть какие-либо вопросы: -)

1 голос
/ 25 октября 2012

Рассчитать Оставить рабочие дни в столбце таблицы в качестве значения по умолчанию - обновлено

Если вы используете SQL, вот запрос, который может вам помочь: http://gallery.technet.microsoft.com/Calculate...

0 голосов
/ 14 августа 2014

Попробуйте этот код

select (DATEDIFF(DD,'2014-08-01','2014-08-14')+1)- (DATEDIFF(WK,'2014-08-01','2014-08-14')* 2)
...