显然,获取当前日期的月份是直截了当的,但我需要使用不同的结束日期来获取月份名称。
我需要获取月份名称,其中月份的开始日期是月份的第一个星期三之后的第一个星期四,而月份的结束日期是下个月的第一个星期三。这是一个会计事项,所以我不打算与规范争论!
e.g。对于2014年,1月将从1月9日 - 2月5日开始,2月将从2月6日 - 3月5日开始,3月将从3月6日 - 4月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答案的延伸,但我不想编辑他们的答案,也不适合发表评论