我需要过滤我的查询,以便在上个月的25日和当月的25日之间提取结果。 SP收到一个日期作为参数,我用它来提取当前月份。我试图进行一些投射,但我无法想象如何处理上个月有不同年份的1月份(必须有一个更有效的方式也)
@Date smalldatetime --received as parameter
select *
from mytable
where mytable.mydate between '25/'+cast(MONTH(@date)-1 as varchar(2))+'/'+cast(YEAR(@date) as varchar(4)) and '25/'+cast(MONTH(@date) as varchar(2))+'/'+cast(YEAR(@date) as varchar(4))
答案 0 :(得分:3)
我会这样做:
select t.*
from t
where mydate >= dateadd(month, -1, datefromparts(year(getdate()), month(getdate()), 25)) and
mydate < datefromparts(year(getdate()), month(getdate()), 25)
我会使用datefromparts()
而不是为此目的构建日期字符串。
答案 1 :(得分:2)
你不需要做任何演员。 SQL Server的日期时间功能非常通用。试试这个:
SELECT *
FROM mytable
WHERE mytable.mydate BETWEEN DATEADD(DAY, 25, DATEADD(MONTH, DATEDIFF(MONTH, 0, @Date) - 1, 0)) AND DATEADD(DAY, 25, DATEADD(MONTH, DATEDIFF(MONTH, 0, @Date), 0))