【发布时间】:2013-12-10 11:17:24
【问题描述】:
我正在寻找一个 SQL 函数,它提供过去 12 个月的开始日期和结束日期。假设您选择 10.Dec,它将给出结果:
- StartDate -- EndDate
- 2013-11-01 - 2013-11-30
- 2013-10-01 - 2013-10-31
- 2013-09-01 - 2013-09-30
过去 12 个月也是如此。
我尝试修改我们拥有的旧功能,但最终我完全脱离并感到困惑。
ALTER FUNCTION [dbo].[Last12Months](@Date date) RETURNS TABLE
AS
Return
(
with cte as (
SELECT DATEADD(mm, DATEDIFF(mm, 01, @Date), 01) AS Start,
DATEADD(mm, DATEDIFF(mm, -12, @Date), -12) AS EndDate
union all
select Start - 1, EndDate - 1 from cte
where Start >= @Date )
select CAST(Start as DATE) StartDate, CAST(EndDate as DATE) EndDate from cte)
像这样运行它:
select * from dbo.Last12Months ('2013-12-10')
得到:
- StartDate - EndDate
- 2013-12-02 - 2013-12-20
有人知道该怎么做吗?
【问题讨论】:
-
考虑到date and time work in SQL Server(以及所有其他RDBMS,真的),您最好存储一个“专有”结束日期。
标签: sql sql-server function date