sql - 每月第一天至上周六
问题描述
我正在尝试过滤数据以仅包括该月的第一天,直到上一个星期六。例如,如果我在 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(星期六)的数据。另一个问题是,如果今天是星期六,如果今天是星期六,那么我仍然需要前一个星期六的日期,而不是今天的日期。
解决方案
你可以试试这个查询。
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
你可以在这里看到现场演示。
推荐阅读
- mongodb - 如何正确地将数据保存到 MongoDb 使用 CompletableFuture 在无阻塞堆栈中抛出 Spring-data
- c++ - Include file on different compilers
- arrays - (Typescript) How to instanciate object literal that contain a field of array type?
- java - 飞机座位程序(二维数组)
- node.js - Xero OAuth2 节点 API - API 在哪里使用提供给回调的授权代码?
- batch-file - Is there a way to use FINDSTR with non-ASCII (in this case Japanese/Chinese) characters in batch?
- mysql - Python 无法执行由选项菜单生成的 SQL 语句
- unity3d - Unity Particle System Setup like Club Penguin Dance Contest
- python - 错误:命令出错,退出状态为 1:Python 3.8
- c# - 如何在 ASP.NET MVC 5 中实现 CheckBoxFor?