将筛选器应用于sql中的未来日期

将筛选器应用于sql中的未来日期,sql,sql-server,tsql,date,filter,Sql,Sql Server,Tsql,Date,Filter,我有一列这样的日期 1. 01-Mar-2012 2. 01-Apr-2012 3. 01-May-2012 4. 01-Jun-2012 5. 01-Jul-2012 6. 01-Aug-2012 7. 01-Sep-2012 8. 01-Oct-2012 9. 01-Nov-2012 10. 01-Dec-2012 11. 01-Jan-2013 12. 01-Mar-2013 13. 01-Apr-2013 14. 01-May-2013 15. 01-Jun-2013 16. 01-Ju

我有一列这样的日期

1. 01-Mar-2012
2. 01-Apr-2012
3. 01-May-2012
4. 01-Jun-2012
5. 01-Jul-2012
6. 01-Aug-2012
7. 01-Sep-2012
8. 01-Oct-2012
9. 01-Nov-2012
10. 01-Dec-2012
11. 01-Jan-2013
12. 01-Mar-2013
13. 01-Apr-2013
14. 01-May-2013
15. 01-Jun-2013
16. 01-Jul-2013
17. 01-Aug-2013
18. 01-Sep-2013
19. 01-Oct-2013
20. 01-Nov-2013
21. 01-Dec-2013
我只是想对数据应用一个过滤器,以便记录在2013年的某个月(比如现在的4月)停止

我试过以下方法,但想不出最后一部分:

WHERE DATEPART(year, Q.TermDate) <= DATEPART(year, DATEADD(YEAR, 1, GETDATE())) 
AND DATEPART(MONTH, Q.TermDate) <= ...)

WHERE DATEPART(year,Q.TermDate)如果这些已经是日期时间,那么只需使用如果这些已经是日期时间,那么只需使用您可以这样编写语句:

WHERE CONVERT(VARCHAR(6),TermDate,112) <= '201304'

你可以这样写你的陈述:

WHERE CONVERT(VARCHAR(6),TermDate,112) <= '201304'

相当直截了当

SELECT * FROM Q WHERE TermDate<'2013-04-01';

从Q中选择*,其中TermDate相当直接

SELECT * FROM Q WHERE TermDate<'2013-04-01';

从Q中选择*其中TermDate假设年和月参数:

DECLARE @siYear smallint
DECLARE @tiMonth tinyint
SET @siYear = 2013
SET @tiMonth = 4

SELECT
  MyTable.MyDateValue
FROM
  MyTable
WHERE
  MyTable.MyDateValue <= CAST(RIGHT('0000' + CAST(@siYear AS varchar(4)), 4) + '-' + RIGHT('00' + CAST(@tiMonth AS varchar(2)), 2) + '-01' AS datetime)
DECLARE@siYear smallint
声明@tiMonth tinyint
设置@siYear=2013
设置@tiMonth=4
挑选
MyTable.MyDateValue
从…起
我的桌子
哪里

MyTable.MyDateValue假设年和月参数:

DECLARE @siYear smallint
DECLARE @tiMonth tinyint
SET @siYear = 2013
SET @tiMonth = 4

SELECT
  MyTable.MyDateValue
FROM
  MyTable
WHERE
  MyTable.MyDateValue <= CAST(RIGHT('0000' + CAST(@siYear AS varchar(4)), 4) + '-' + RIGHT('00' + CAST(@tiMonth AS varchar(2)), 2) + '-01' AS datetime)
DECLARE@siYear smallint
声明@tiMonth tinyint
设置@siYear=2013
设置@tiMonth=4
挑选
MyTable.MyDateValue
从…起
我的桌子
哪里

MyTable.MyDateValue这不是Oracle。让我们尝试使用ISO-8601。其中TermDate我只是坚持使用示例,但是是的,日期应该以更标准的方式书写。系统应该能够以任何方式解释它,尽管这不是Oracle。让我们尝试使用ISO-8601。其中TermDate我只是坚持使用示例,但是是的,日期应该以更标准的方式书写。系统应该能够以任何一种方式解释它,尽管听起来OP想要以一个月为参数,并以该整数为逻辑基础。听起来OP想要以一个月为参数,并以该整数为逻辑基础。只需稍加修改,它就可以满足我的需要。再次感谢。其中Q.TermDate只是做了一点小小的修改,就满足了我的需要。再次感谢。Q.TermDate在哪里