我正在尝试过滤数据,使其仅包括每月的第一天直到上一个星期六。例如,如果我在6-14-19(星期五)运行查询,则数据将仅包括6-1-19至6-8-19(星期六)。
现在我只有一个月至今的过滤器:
@SampleDate BETWEEN DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0) AND DATEADD(day, 0, CAST(GETDATE() AS date))
我想知道如何使用GETDATE()获取上一个星期六的日期,以便替换当前当前月份过滤器的上限。
编辑:我刚刚意识到特殊情况。如果前一周的星期六在上个月,那么我希望能够获得上个月的日期。例如,如果我在5-1-19(星期三)运行此查询,那么我希望从4-1-19到4-27-19(星期六)的数据。另一个问题是,如果当前日期是星期六,如果今天当前是星期六,那么我仍然需要上一个星期六的日期,而不是今天的日期。
答案 0 :(得分:0)
检查此-
DECLARE @RunDate DATE = '20190617'
SELECT
CASE WHEN A.StartDate > A.EndDate THEN DATEADD(MM,-1, A.StartDate) ELSE A.StartDate END StartDate,
A.EndDate
FROM
(
SELECT
CAST(DATEADD(DD,-(DATEPART(DD,@RunDate))+1,@RunDate) AS DATE) AS StartDate,
CASE DATENAME(weekday,@RunDate)
WHEN 'Saturday' THEN DATEADD(DD,-0,@RunDate)
WHEN 'Sunday' THEN DATEADD(DD,-1,@RunDate)
WHEN 'Monday' THEN DATEADD(DD,-2,@RunDate)
WHEN 'Tuesday' THEN DATEADD(DD,-3,@RunDate)
WHEN 'Wednesday' THEN DATEADD(DD,-4,@RunDate)
WHEN 'Thursday' THEN DATEADD(DD,-5,@RunDate)
WHEN 'Friday' THEN DATEADD(DD,-6,@RunDate)
END AS EndDate
) A
答案 1 :(得分:0)
您可以尝试此查询。
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
您可以观看现场演示Here。