SELECT 上一年截至当前日期
SELECT previous year up to current date
我有一个 table,它有一个开始日期列,例如:
Start Date
2015/01/05
2015/02/08
2016/01/10
2017/02/10
etc...
我正在尝试将 WHERE
子句放入 select 基于当前 GETDATE()
.
一年前的所有记录
例如,如果今天是 2019 年 7 月并且我 运行 查询,我希望它 运行 并给我从 2018 年 7 月到 2019 年 6 月的开始日期. 如果我 运行 2019 年 8 月,我希望它显示从 2018 年 8 月到 2019 年 7 月的开始日期,依此类推。基本上到当前日期的前一个月。
目前我的 WHERE
子句中有这个:
WHERE start_date between DATEADD(YEAR,-1, GETDATE()) and GETDATE()
但我认为这似乎只比当前日期早一年。
我有更好的方法吗?
您可以在 SQL 服务器中使用 datefromparts()
:
where start_date >= datefromparts(year(getdate()) - 1, 1, 1) and
start_date < datefromparts(year(getdate() - 1, month(getdate()), day(getdate())
我认为这是您的要求:
WHERE start_date BETWEEN
DATEFROMPARTS(YEAR(GETDATE()) - 1, MONTH(GETDATE()), 1)
AND
DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), -1)
与:
DATEFROMPARTS(YEAR(GETDATE()) - 1, MONTH(GETDATE()), 1)
你得到去年当月的第一天。
有:
DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), -1)
你得到上个月的最后一天。
见 demo.
我有一个 table,它有一个开始日期列,例如:
Start Date
2015/01/05
2015/02/08
2016/01/10
2017/02/10
etc...
我正在尝试将 WHERE
子句放入 select 基于当前 GETDATE()
.
例如,如果今天是 2019 年 7 月并且我 运行 查询,我希望它 运行 并给我从 2018 年 7 月到 2019 年 6 月的开始日期. 如果我 运行 2019 年 8 月,我希望它显示从 2018 年 8 月到 2019 年 7 月的开始日期,依此类推。基本上到当前日期的前一个月。
目前我的 WHERE
子句中有这个:
WHERE start_date between DATEADD(YEAR,-1, GETDATE()) and GETDATE()
但我认为这似乎只比当前日期早一年。
我有更好的方法吗?
您可以在 SQL 服务器中使用 datefromparts()
:
where start_date >= datefromparts(year(getdate()) - 1, 1, 1) and
start_date < datefromparts(year(getdate() - 1, month(getdate()), day(getdate())
我认为这是您的要求:
WHERE start_date BETWEEN
DATEFROMPARTS(YEAR(GETDATE()) - 1, MONTH(GETDATE()), 1)
AND
DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), -1)
与:
DATEFROMPARTS(YEAR(GETDATE()) - 1, MONTH(GETDATE()), 1)
你得到去年当月的第一天。
有:
DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), -1)
你得到上个月的最后一天。
见 demo.