获取特定月份和年份之前的所有记录

时间:2017-02-24 10:26:55

标签: sql-server

我有一个包含单独的月份和年份字段的表格 - 我需要查询此表格,以便仅在过去的某个月份和年份之前获取记录,这些记录会定期更改。 (为了清楚起见,我已将日期硬编码为2016年11月)

DECLARE @Month INT
DECLARE @Year INT

SET @Month = 11
SET @Year = 2016

SELECT * FROM Items 
WHERE [Month] <= @Month AND [Year] <= @Year

这并不能得到我想要的结果,因为由于月标准,2016年之前的12月项目永远不会被提取。

我尝试通过连接Month和amp;来解决这个问题。年份字段:

SET @YearMonth = 201611

SELECT * FROM Items 
WHERE cast([Year] as nvarchar(4)) + cast([Month] as nvarchar(2)) <= @YearMonth

但这会在2017年退货。(不知道为什么?)

上述查询可以修复,还是有更好的方法来获得所需的结果?

3 个答案:

答案 0 :(得分:2)

在上一次查询中,您获得了2017年的记录,因为20171&lt; = 201711。因此,要修复您的查询,您必须执行类似

的操作
cast([Year] as nvarchar(4)) + right('00' + [Month], 2) <= @YearMonth

最好将日期存储为date(time),而不是将年,月和日存储在不同的属性中。

答案 1 :(得分:2)

SELECT * FROM Items WHERE [Year] < @Year OR ([Year] = @Year AND [Month] <= @Month)

翻译:

  1. 在我选定的年份之前获取所有记录
  2. 仅从选定的月份或之前获取所选年份的那些。

答案 2 :(得分:0)

试试这个,

select  * from Items 
where convert(date,concat([Year],'-',[Month],'-','01')) > 
convert(date,concat(@Year,'-',@Month,'-','01'))