获取具有不同月份开始和结束日期的月份名称

时间:2014-03-17 09:30:38

标签: sql sql-server-2008

显然,获取当前日期的月份是直截了当的,但我需要使用不同的结束日期来获取月份名称。

我需要获取月份名称,其中月份的开始日期是月份的第一个星期三之后的第一个星期四,而月份的结束日期是下个月的第一个星期三。这是一个会计事项,所以我不打算与规范争论!

e.g。对于2014年,1月将从1月9日 - 2月5日开始,2月将从2月6日 - 3月5日开始,3月将从3月6日 - 4月2日开始。

2 个答案:

答案 0 :(得分:3)

我建议您创建一个包含“会计月份”的表格,其中包含开始日期,结束日期和月份名称列。

然后,您可以查询此内容以查找日期在开始日期和结束日期之间的行,并返回月份名称。将其置于标量函数中将使其可以重复使用,并且在未来几个月也可以相对容易地更新。

答案 1 :(得分:2)

我认为,根据Paddy的answer,查找表是最简单的事情。这是为它生成行的一种方法:

; With Numbers(n) as (
    select 4 union all select 5
), Months as (
    select CONVERT(date,'20010104') as StartDt,CONVERT(date,'20010207') as EndDt,
           DATENAME(month,'20010103') as Month
    union all
    select DATEADD(week,n1.n,StartDt),DATEADD(week,n2.n,EndDt),
           DATENAME(month,DATEADD(week,n1.n,StartDt))
    from Months,Numbers n1,Numbers n2 --Old-skool join, just for once
    where DATEPART(day,DATEADD(week,n1.n,StartDt)) between 2 and 8 and
          DATEPART(day,DATEADD(week,n2.n,EndDt)) between 1 and 7 and
          StartDt < '21000101'
)
select * from Months option (maxrecursion 0)

(CW因为这实际上只是对Paddy答案的延伸,但我不想编辑他们的答案,也不适合发表评论