2012-11-27 79 views

回答

4

这应该给你想要的东西

SELECT * 
FROM YourTable 
WHERE YourDate > CAST((
      CASE 
       WHEN DAY(getdate()) < 15 
        THEN (CAST(YEAR(GETDATE()) AS CHAR(4)) + CAST(MONTH(dateadd(month, - 1, getdate())) AS CHAR(2)) + '15') 
       ELSE CAST(YEAR(GETDATE()) AS CHAR(4)) + CAST(MONTH(GETDATE()) AS CHAR(2)) + '15' 
       END 
      ) AS DATETIME) 

编辑 更改。当DAY(GETDATE())> 15 WHEN DAY(GETDATE())< 15,结果一倒:)

+1

我试过了,但我在11/9/2012的结果集中得到了一个日期。它应该从今天直到2012年11月15日才会显示。第一个案件不应该只来自本月而是上个月吗? – JBurace

+0

至少你有想法如何做到这一点,你可以从这个工作,但我会看看明天(我的iPhone在这里Im) – jazzytomato

+0

是的我刚刚注意到我倒过来,但不能从我的手机编辑,只是颠倒'then'和'else'的内容:-) – jazzytomato

3

以格式yyyy-mm-15格式化当前日期,将其转换回日期,与当前日期进行比较,如果这是今天晚些时候,则减去1个月。

这就是我在ANSI SQL中所做的......但显然,MS SQL Server并不知道“间隔”。那么,你可以利用DateAdd代替:

使用DateAdd() - 返回的基础上加入的间隔到指定的日期一新的datetime值。 其中第一个参数指定日期的哪一部分返回新值:yy(yyyy)为Year,mm(m)为Month,dd(d)为Day等 例如:select dateadd(d,2, getdate()) - 为当前日期添加2天并返回新日期。