将过滤器应用于sql中的未来日期

时间:2012-02-21 20:35:36

标签: 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-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) <= ...)

有人可以提出建议吗?

4 个答案:

答案 0 :(得分:2)

如果这些已经是日期时间,那么只需使用&lt; =

SELECT * FROM TABLE WHERE TermDate <= '01-Apr-2013'

答案 1 :(得分:1)

您可以这样写下您的陈述:

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

但是这不会使用您TermDate列上可能包含的任何索引。所以你可以这样做:

WHERE TermDate < '20130501'

答案 2 :(得分:1)

相当直接;

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

演示here

答案 3 :(得分:1)

假设年份和月份参数:

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)

对于我对&lt; = vs&lt;的看法的读者对于日期边界,将谓词更改为:

WHERE
      MyTable.MyDateValue < DATEADD(day, 1, CAST(RIGHT('0000' + CAST(@siYear AS varchar(4)), 4) + '-' + RIGHT('00' + CAST(@tiMonth AS varchar(2)), 2) + '-01' AS datetime))