在SQL Server日期之后过滤结果

时间:2017-12-04 15:13:12

标签: sql sql-server datetime

我需要过滤我的查询,以便在上个月的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))

2 个答案:

答案 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))