我有一张这样的表:
我想在2014年12月到2015年2月之间获取数据,这是我应该在子句之间使用2列:
between (month = 12 and year = 2014) and (month = 1 and year = 2015)
我认为这是不可能的。 还有另一种方法吗?真的需要你的建议。
答案 0 :(得分:4)
我的建议是如果可能的话,实际更改表格以使用实际日期。如果他们的日期不完整,您可以强制他们在期间的开头,例如yyyy-mm-01
。
然后,您可以在查询中轻松使用between
以及各种奇妙的日期操作功能。
但是,如果这不是一个选项,并且您的数据在表中只存在有效数据的意义上是正确的,那么您可以使用以下内容:
select * from mytable
where (year = 2014 and month >= 12)
or (year = 2015 and month <= 2)
这可以推广到M1 / Y1和M2 / Y2之间的日期查询,包括:
select * from mytable
where (year = Y1 and month >= M1)
or (year > Y1 and year < Y2)
or (year = Y2 and month <= M2)
答案 1 :(得分:0)
试试这个:
select * from `table` where (month =12 and year=2014) or (month in (1,2) and year =2015)
答案 2 :(得分:0)
这个怎么样:
Year*12+Month BETWEEN @StartYear*12+@StartMonth and @EndYear*12+@EndMonth
使用您的valuews,即:
Year*12+Month BETWEEN 2014*12+12 and 2015*12+1
如果有大量记录,并且您依赖于索引月份和年份,则可能会很慢。在这种情况下,您可能想尝试其他选项并查看是否获得了性能改进