以下是我正在使用的查询:
SELECT * FROM ra_ProjectCalendar
WHERE MonthNumber between @Month and @Month + 12 and FullYear = @Year
今年效果很好,但是今年12月停止了。如何让它显示运行年份?
答案 0 :(得分:2)
你的日期是如何存储的?
来自你的sql,我猜你有一个月的字段,一个一年一个,一个一天。我建议改为使用一个日期时间字段,然后您可以使用DateAdd()方法添加12个月(或任何其他间隔)。
编辑:在评论中向我指出,你在这方面获得的一件事就是表现 - 这或多或少取决于你的应用程序的规模,但总是很高兴知道。如果您在存储过程中运行此查询,那么您将执行以下操作:DECLARE @oneYearAhead datetime;
SET @oneYearAhead = DateAdd(m, 12, @PassedDate)
SELECT * FROM ra_ProjectCalendar
WHERE @PassedDate <= [Date] AND [Date] <= @oneYearAhead;
使用上面的代码,您将获得所通过日期和提前一年之间的所有条目。 (我不是100%肯定声明和设置@oneYearAhead
变量的语法,但你明白了......)。请注意,我在列名称Date周围使用的[]
允许我在列名中使用保留字 - 我已经习惯了,而不是记住保留哪些单词...
答案 1 :(得分:1)
试试这个:
SELECT * FROM ra_ProjectCalendar
WHERE
(MonthNumber > @Month AND FullYear = @Year)
OR (MonthNumber < @Month AND FullYear = @Year + 1)
答案 2 :(得分:0)
这样的事情可能会更好 - 但不清楚你的意图是什么:
select *
from ra_ProjectCalendar
where DATEDIFF ( month , @startdate , @enddate ) <=12
编辑:这是SQl服务器语法
答案 3 :(得分:0)
实际传入并存储日期而不是月份和年份,并使用DateDiff与当前日期进行比较:
WHERE DATEDIFF(m, @PassedDate, StoredDateColumn) < 12
请注意,我使用了12个月,而不是1年,因为DATEDIFF计算了越过边界的数量。所以在12月,使用带有年份datepart的datediff将在一个月之后返回一个。你真的想要12个月的时间。
答案 4 :(得分:0)
根据您的信息存储方式(从您的查询中有点难以辨别),DATEADD或DATEDIFF可能会对您有所帮助。 MSDN上有可用的date functions列表。