这与Floor a date in SQL server有关,但我更进一步:
我在SQL Server表上编写查询,我想获取当前日历年和上一个日历年的所有记录。所以,现在,我想要一个查询返回2008年1月1日到今天之间的所有记录。但是到了2010年1月1日,我希望它能够返回不超过2009年的记录。
基本上,我想将当前日期置于年初,然后减去1。
在浏览了一些SQL Server文档之后,我想出了这个:
WHERE create_date >= CAST((CAST(YEAR(GETDATE()) AS int) -1) AS varchar)
但感觉有点难看。还有更好的方法吗?
答案 0 :(得分:4)
为什么不在create_date上使用year函数呢?
WHERE YEAR(create_date) >= (YEAR(GETDATE()) -1)
这假设(正如您所做)数据库中没有比今天的日期更多的记录
答案 1 :(得分:0)
我建议使用日期lastyear-01-01分配一个变量,或者为它做一个UDF,或类似
DECLARE @startOfLastYear DATETIME
SET @startOfLastYear = CAST(YEAR(GETDATE()) - 1 AS VARCHAR) + '-01-01'
然后执行查询:
WHERE create_date >= @startOfLastYear
由于两个原因: