我有一个包含单独的月份和年份字段的表格 - 我需要查询此表格,以便仅在过去的某个月份和年份之前获取记录,这些记录会定期更改。 (为了清楚起见,我已将日期硬编码为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年退货。(不知道为什么?)
上述查询可以修复,还是有更好的方法来获得所需的结果?
答案 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)
翻译:
答案 2 :(得分:0)
试试这个,
select * from Items
where convert(date,concat([Year],'-',[Month],'-','01')) >
convert(date,concat(@Year,'-',@Month,'-','01'))