SQL以周一为基准,查询条件为本周的数据

  • 2019-05-23
  • 219
  • 1

由于系统固定查询条件中,日期型数据在按周作为条件进行过滤时,默认按照西方以周日为第一天的规则,但在国内,一般是以周一为第一天。那么我们在查询的固定条件进行过滤时,需要进行一定的调整:

首先是获取本周的周一的起始时间:

SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)

显示的格式为:2019-06-17 00:00:00.000,我们需要将其格式化为”年-月-日”的格式:

SELECT CONVERT(varchar(100), DATEADD(wk, DATEDIFF(wk,0,getdate()), 0), 23)

即显示的格式为:2019-06-17

然后获取”本周的周一的起始时间”加上7天之后的结束时间:

SELECT dateadd(day,7,CONVERT(varchar(100), DATEADD(wk, DATEDIFF(wk,0,getdate()), 0), 23))

显示的格式依然为:2019-06-24 00:00:00.000,同样将其格式化为”年-月-日”的格式:

SELECT CONVERT(varchar(100),dateadd(day,7,CONVERT(varchar(100), DATEADD(wk, DATEDIFF(wk,0,getdate()), 0), 23)), 23)

即显示的格式为:2019-06-24

然后根据实际的需求进行配置条件字段即可:
完整的案例:

SELECT * FROM uf_yzgzap WHERE modedatacreatedate>=(SELECT CONVERT(varchar(100), DATEADD(wk, DATEDIFF(wk,0,getdate()), 0), 23)) and modedatacreatedate<=(SELECT CONVERT(varchar(100),dateadd(day,7,CONVERT(varchar(100), DATEADD(wk, DATEDIFF(wk,0,getdate()), 0), 23)), 23))

我们只需要取出WHERE 条件,并将其日期字段modedatacreatedate修改为实际的日期字段即可(注意,必须为“年-月-日”的格式数据)。

感谢打赏!
支付宝

回复

  • WQINF.COM回复

    SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0) /*本周第一天*/
    SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) /*本月第一天*/
    SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0) /*本季第一天*/
    SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0) /*本年第一天*/
    Select dateadd(ms,-3,DATEADD(wk, DATEDIFF(wk,0,GETDATE())+1, 0)) /*本周最后一天*/
    Select dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,GETDATE())+1, 0)) /*本月最后一天*/
    Select dateadd(ms,-3,DATEADD(qq, DATEDIFF(qq,0,GETDATE())+1, 0)) /*本季最后一天*/
    Select dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,GETDATE())+1, 0)) /*本年最后一天*/

发表回复