2016-06-23 2 views
0

Я хотел бы исключить выходные в 2016 году, но мне нужны выходные в 2015 году для моих расчетов. я использовал это выражение в моем запросе:Как исключить выходные только в 2016 году

((DATEPART(dw, IntervalDate) + @@DATEFIRST) % 7) NOT IN (0,1) 

Но это исключает каждый год в выходные дни. Как я могу исключить только субботу, воскресенье в 2016 году?

Я использую SSRS, и я думал исключить выходные дни на 2016 год в опции фильтра, но это занимает много времени, и, возможно, это возможно сделать в запросе.

+0

Какая СУБД вы используете? –

+0

Я использую SSMS 11.0 –

+0

Это не СУБД, это инструмент клиента SQL. Но поскольку единственной СУБД, к которой он может подключиться, является SQL Server, можно с уверенностью предположить, что вы используете SQL Server. –

ответ

0

Попробуйте это:

(DATEPART(year, IntervalDate) <> 2016) OR ((DATEPART(dw, IntervalDate) + @@DATEFIRST) % 7) NOT IN (0,1) 
0

Предположительно вы имеете в виду вы хотите ограничить набор результатов, исключая выходные дни в 2016 году?

Этот код будет делать это для вас:

WHERE YEAR(IntervalDate) <> 2016 OR (YEAR(IntervalDate) = 2016 AND DATEPART(dw,IntervalDate) > 1 AND DATEPART(dw,IntervalDate) < 7) 

(вы можете использовать YEAR или DATEPART)

Но вы должны сначала понять, в какой день недели соответствует 1. Посмотрите в команде SET DATEFIRST.

+0

Спасибо, но если я использую это выражение, появляется ошибка: 'Timeout'. –

+0

Сколько строк выбирают против? – BIDeveloper

+0

Я использовал диаграмму в SSRS: 'IntervalDateWeek> = getdate() - 350' Но если я использую ее на короткий срок, отчет также отображает ошибку. –

0

Таблица календарей значительно упрощает запросы, подобные этой. Большим преимуществом является то, что правильные запросы явно правильные.

select * 
from calendar 
where (year_of_date = 2015) 
    or (year_of_date = 2016 and day_of_week not in ('Sat', 'Sun')) 
order by cal_date; 

I've posted DDL for a calendar table in PostgreSQL.

+0

Я не вижу, как это облегчает ситуацию. Вы делаете то же самое, где предложение (в основном), как и два других ответа, но вы ввели сложность (а, следовательно, и производительность) дополнительной таблицы. Я что-то упускаю? – BIDeveloper

+1

@BIDeveloper: a) Предложение WHERE, основанное на таблице календаря, настолько читаемо, что даже финансовые аудиторы могут видеть, что это * очевидно * правильно. b) Соединение в таблице календаря обычно выполняется быстрее - примерно в два раза быстрее в моей системе - из-за индексов на его столбцах. –

+0

Так что я ничего не пропустил :-) – BIDeveloper

Смежные вопросы