SQL - 选择一年中日期大于一个月的数据

时间:2015-07-17 22:22:03

标签: sql sql-server

我有一个名为quiz的表,它有3列:

enterYear  enterMonth  quizMark

2013        7            9.5   
2013        8            8.5    
2013        9            9.75    
2013       10            10    
2013       11            7.75    
2013       12            8.5
2014        1            5   
2014        2            8.75    
2014        3            10

现在,我想选择2013年9月之后输入的条目(包括9月)。我试过这个错了:

select * from quiz q where q.year>=2013 and q.month>=9

这省略了2014年的所有条目,因为它们的月份少于9个,但我确实希望它们在结果中,因为它们是在2013年9月之后。

那么,我试过这个

select * from quiz q 
where Convert(date, CAST(q.year as varchar(4))+'/'+CAST(q.month as varchar(2))+'/01')>='2013/9/01'

显示结果半秒钟,然后通过给出错误信息迅速消失:

  

Msg 241,Level 16,State 1,Line 1   从字符串转换日期和/或时间时转换失败。“

有人可以帮助使用正确的代码来实现结果,非常感谢!

3 个答案:

答案 0 :(得分:6)

select * from quiz q where q.year>2013 or(q.year=2013 and q.month>=9)

答案 1 :(得分:2)

select * from quiz q where (q.year>=2013 and q.month>=9) OR q.year>=2014

这将记录2013年9月以后的所有日期。

答案 2 :(得分:2)

根据您的索引,您可能会发现这会提供更好的性能。表示为单个范围的搜索具有残差谓词而不是empty,这通常会导致扫描。

or