以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  如何简化在select语句中根据当前时间来判断获奖时间在本月25日和上月26日之间的数据并进行筛选数据?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=164921)

--  作者:cnsjroom
--  发布时间:2021/5/8 22:56:00
--  如何简化在select语句中根据当前时间来判断获奖时间在本月25日和上月26日之间的数据并进行筛选数据?
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编辑过]

--  作者:有点蓝
--  发布时间: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日