Я создаю хранимую процедуру SQL-сервера, которая выполняет большую фильтрацию на основе текущей недели. Вместо того, чтобы передавать дату начала и окончания, я прохожу за одну дату и используя Datepart(), чтобы отфильтровать неделю.Datepart() есть ли способ использовать переменную для интервала datepart
Where DATEPART(WEEK, cd.TurninDate) = DATEPART(WEEK, @StartDate)
and DATEPART(YEAR, cd.TurninDate) = DATEPART(YEAR, @StartDate)
Стараясь топ быть активным, я могу видеть менеджеры просят, чтобы это было работать ежемесячно или ежеквартально, а также еженедельно. Я бы предпочел не иметь сохраненный Proc для каждой версии, если я могу помочь. Я хочу передать частоту и дату, но она не работает.
Я пробовал:
Where DATEPART(@Freq, cd.TurninDate) = DATEPART(@Freq, @StartDate)
and DATEPART(YEAR, cd.TurninDate) = DATEPART(YEAR, @StartDate)
, но я получаю сообщение об ошибке на @Freq не признается в качестве интервала.
Кто-нибудь знает способ, которым я могу обойти это?
Пропустите даты начала и окончания. Дата начала и продолжительность (количество дней). Фильтрация в том, как вы это делаете, не может использовать index => она медленна на больших таблицах. –
Мой менеджер, который является полу-SQL-грамотным, будет запускать это, поэтому я хочу сделать его максимально простым. Моя цель состояла в том, чтобы позволить ему ввести текущую дату (или любую дату предыдущей недели) и получить номера полной недели. Я не хочу, чтобы он искал первую дату недели или (когда он расширялся только за неделю) выяснял, сколько дней в месяце или квартале. К счастью, никогда не будет большого количества записей. –