Вы можете попробовать этот запрос.
declare @date datetime = getdate() --Todays date
select <Column1>,
<Column2>,
.........
from <YourTableName>
where <YourDateColumn> between
datefromparts(Year(@date), Month(@date), 1) -- First date of month
and
DATEADD(DAY, DATEDIFF(DAY, 5, @date) /7 * 7, 5) --Previous Saturday
Вы можете проверить с помощью приведенной ниже реализации.
create table TableA(
Name Varchar(50),
DOJ Date
)
Insert into TableA Values
('A', '2019-06-01'),
('B', '2019-06-02'),
('C', '2019-06-03'),
('D', '2019-06-04'),
('E', '2019-06-05'),
('F', '2019-06-15'),
('G', '2019-06-06'),
('H', '2019-06-08'),
('I', '2019-06-09')
declare @date datetime = getdate() --Todays date
select
*
from TableA
where DOJ between
datefromparts(Year(@date), Month(@date), 1) -- First date of month
and
DATEADD(DAY, DATEDIFF(DAY, 5, @date) /7 * 7, 5) --Previous Saturday
Вывод такой, как показано ниже.
Name DOJ
-----------------------
A 01.06.2019 00:00:00
B 02.06.2019 00:00:00
C 03.06.2019 00:00:00
D 04.06.2019 00:00:00
E 05.06.2019 00:00:00
G 06.06.2019 00:00:00
H 08.06.2019 00:00:00
Если вы выполняете запрос на Saturday
само по себе, то для получения предыдущего Saturday
вы можете вычесть один день из даты выполнения.
declare @date datetime = '2019-06-15' --Todays date
if (DATENAME(weekday,@date))='Saturday'
begin
set @date = DATEADD(DAY, -1, @date)
end
И вы можете увидеть живое демо Здесь .