Foxtable(狐表)用户栏目专家坐堂 → 如何简化在select语句中根据当前时间来判断获奖时间在本月25日和上月26日之间的数据并进行筛选数据?


  共有3719人关注过本帖树形打印复制链接

主题:如何简化在select语句中根据当前时间来判断获奖时间在本月25日和上月26日之间的数据并进行筛选数据?

帅哥哟,离线,有人找我吗?
cnsjroom
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
如何简化在select语句中根据当前时间来判断获奖时间在本月25日和上月26日之间的数据并进行筛选数据?  发帖心情 Post By:2021/5/8 22:56:00 [只看该作者]

sel ect DATEADD(MONTH,-1,getdate())   当前时间月份减掉1个月   比如当前时间是2021-5-8   结果为2021-4-8
sel ect datepart(year,getdate())     获取当前时间年份
sel ect datepart(day,getdate())      获取当前时间日期
sel ect datepart(month,getdate())  获取当前时间月份

代码一:
sel ect  * from {表彰} where   datepart(year,[获奖时间]) =datepart(year,getdate()) and datepart(month,[获奖时间]) >= DATEPART(MONTH,DATEADD(MONTH,-1,getdate())) and datepart(month,[获奖时间]) <= datepart(month,getdate()) and datepart(day,[获奖时间]) = 25
 该语句可以获取得到  大于并等于sql系统时间当年 且当月减1个月  小于并等于sql系统时间当月  且日期为25号的数据
如 获奖时间在 2021-4-25     2021-5-25 这两天的数据

代码二:
sel ect  * from {表彰} where   datepart(year,[获奖时间]) =datepart(year,getdate()) and datepart(month,[获奖时间]) >= DATEPART(MONTH,DATEADD(MONTH,-1,getdate())) and datepart(month,[获奖时间]) <= datepart(month,getdate()) and datepart(day,[获奖时间])  <= 25   
该代码实现了从2021-4-1到2021-5-25这个区间的所有数据筛选

红色部分要怎么变更   才能实现2021-4-26直到2021-5-25之间的数据呢?前面年月都准确了   现在这个日期怎么确定为4月26.27.28.29.30.5月1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25这些区间值呢?




代码三:
sql语句
se lect * from {表彰} where 获奖时间 between '2021-4-26' and  '2021-5-25'
这个可以实现4月26.27.28.29.30.5月1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25这些区间值
但是不想把 '2021-4-26' and  '2021-5-25'这个部分写死   想让系统自动根据当前系统时间 自动变更为
2021-5-26  2021-6-25    
2021-6-26  2021-7-25
……



上述代码有没有更简便的写法呢?实现2021-4-26至2021-5-25 这个区间的数据筛选:
[此贴子已经被作者于2021/5/8 23:42:10编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110669 积分:563259 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/9 21:12:00 [只看该作者]

SELECT CAST(convert(nvarchar(8),dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)),120) + '26' as datetime) as 上个月26日, CAST(convert(nvarchar(8),getdate(),120) + '25' as datetime) as 这个月25日

 回到顶部