Как исключить выходные дни в запросе SQL Server?
Как исключить значения в столбце 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
Спасибо!
Ответы
Ответ 1
При работе с расчетами на день недели важно учитывать текущие настройки DATEFIRST
. Этот запрос всегда корректно исключает выходные дни, используя @@DATEFIRST
, чтобы учесть любые возможные настройки для первого дня недели.
SELECT *
FROM your_table
WHERE ((DATEPART(dw, date_created) + @@DATEFIRST) % 7) NOT IN (0, 1)
Ответ 2
SELECT date_created
FROM your_table
WHERE DATENAME(dw, date_created) NOT IN ('Saturday', 'Sunday')
Ответ 3
Предполагая, что вы используете SQL Server, используйте DATEPART с dw:
SELECT date_created
FROM your_table
WHERE DATEPART(dw, date_created) NOT IN (1, 7);
EDIT: Я должен указать, что фактическое числовое значение, возвращаемое DATEPART (dw), определяется значением, заданным с помощью SET DATEFIRST:
http://msdn.microsoft.com/en-us/library/ms181598.aspx
Ответ 4
Попробуйте функцию DATENAME()
:
select [date_created]
from table
where DATENAME(WEEKDAY, [date_created]) <> 'Saturday'
and DATENAME(WEEKDAY, [date_created]) <> 'Sunday'
Ответ 5
Ответ зависит от настройки вашего сервера в неделю, поэтому он также
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)
если понедельник - первый день недели для вашего сервера
Комментарий, если у вас есть вопросы: -)
Ответ 6
Рассчитать Покинуть рабочие дни в столбце таблицы в качестве значения по умолчанию - обновлено
Если вы используете SQL, вот запрос, который может вам помочь: http://gallery.technet.microsoft.com/Calculate...
Ответ 7
Попробуйте этот код
select (DATEDIFF(DD,'2014-08-01','2014-08-14')+1)- (DATEDIFF(WK,'2014-08-01','2014-08-14')* 2)