我在数据库中有一个表,下面是列:
该表有多个记录,但对Month,Year和Name的组合有唯一约束。
该表格的数据如下:
Month Year Name
1) 1 2016 test1
2) 2 2016 test2
3) 3 2016 test3
4) 1 2017 test4
5) 2 2017 test5
现在我想要的记录大于或等于第3个月且大于等于2016年。 所以输出应该像下面这样:
Month Year Name
1) 3 2016 test3
2) 1 2017 test4
3) 2 2017 test5
如何实现这一目标。我没有得到任何关于如何做到这一点的提示。我正在添加where
条款,其中月份> = 3年份> = 2016但它没有返回任何记录,我认为是正确的,因为我正在申请和两个表达式的条件。
答案 0 :(得分:3)
为了产生你在第二个表中描述的结果,我会写这个查询:
select [Month], [Year], [Name]
from Table -- your table name
where year > 2016 or ( year = 2016 and month >= 3) -- don't forget the parentheses.
从结果表中可以理解的是,单词中描述的查询将是:
向我提供年度大于2017年的所有记录(在这种情况下,月份不重要,给我所有月份)或者如果年份是2016年,请给我所有月份大于或等等于3(包括3月及以后)。不要给我任何年度小于2016年的记录。
如果这是正确的,那么上面发布的查询会给出正确的结果。
答案 1 :(得分:1)
如果您希望获得'2016-03-01'
之后或之后开始的所有记录,那么一种方法是将[year]
和[month]
重新构建回date
数据类型。
select *
from t
where convert(date,convert(varchar(10),([year]*10000)+([month]*100)+1)) >= '20160301'
或在sql server 2012 +
中select *
from t
where datefromparts([year],[month],1) >= '20160301'
答案 2 :(得分:-1)
你的问题不明确。从您想要的解释"和"条件但在输出结果中它应该是"或"。对于前月> = 3或年>> = 2016。这是你的输出说法。