计算日历年的会计月。 [英] Calculate fiscal month for the Calendar Year.

查看:85
本文介绍了计算日历年的会计月。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的组织在每年1月1日至12月31日的日历年之后。

但是出于报告目的,我们将在日历年的财政月份之前。



我们的会计月度从每个日历月的第一个星期三开始,到每个星期三的最后一个

结束,除了每个季度结束

即3月31日,6月30日,9月30日和12月31日,财政月份在相应的

季度的最后一天结束。

我需要一个函数或查询来计算表单任何给定日期的会计月份mm / dd / yyyy例如10/25/2012

我们非常感谢任何帮助。

解决方案

测试它(MS SQL Server 20005的版本):

  DECLARE   @ startDate   DATETIME  
DECLARE @ endDate DATETIME

SET DATEFORMAT ymd;

SET @ startDate = CONVERT DATETIME CONVERT VARCHAR 10 ),YEAR(GETDATE()))+ ' - ' + CONVERT VARCHAR 10 ),MONTH(GETDATE()))+ ' - 01'
SET @ endDate = DATEADD(dd,-1,DATEADD(mm, 1 , @ startDate ))

- 以下注释更改为当前月份
SET @ startDate = ' 2013-06-01'
< span class =code-keyword> SET @ endDate = ' 2013-06-30'
- SELECT @startDate AS sDate,@ endDate AS eDate

; WITH fullmonth AS

SELECT @ startDate AS aDate,DATENAME(dw, @ startDate AS NameOfDate
UNION ALL
SELECT DATEADD(dd , 1 ,aDate) AS aDate,DATENAME(dw,DATEADD( dd, 1 ,aDate)) AS NameOfDate
FROM fullmonth
WHERE aDate< @endDate

SELECT CONVERT VARCHAR 10 ),aDate, 121 AS aDate,NameOfDate
FROM
SELECT *,
SELECT MIN(aDate) FROM fullmonth WHERE NameOfDate = ' 星期三' AS MinDate,
SELECT MAX(aDate) FROM fullmonth WHERE NameOfDate = ' Wednesday' AND MONTH(aDate) NOT IN 3 6 9 12 )) AS MaxDate
FROM fullmonth
AS T
WHERE aDate BETWEEN MinDate < span class =code-keyword> AND COALESCE (MaxDate, @ endDate





以上代码生成实际月份的日期集;)



< pre lang =text> 2013-06-05 Wednesday
2013-06-06 Thursday
2013-06-07 Friday
2013-06-08 Saturday
2013-06 -09周日
2013-06-10周一
2013-06-11周二
2013-06-12周三
2013-06-13周四
2013-06-14周五
2013-06-15周六
2013-06-16周日
2013-06-17周一
2013-06-18周二
2013-06-19周三
2013-06-20周四
2013-06-21周五
2013-06-22周六
2013-06-23周日
2013-06-24周一
2013-06-25周二
2013-06-26周三
2013-06-27周四
2013-06-28周五
2013-06-29周六
2013-06-30周日


My organization follows the calendar year from Jan 1st to Dec 31st every year.
But for reporting purposes we go by the fiscal month of the calendar year.

Our fiscal month starts on the first Wednesday of every calendar month and ends on the last
Wednesday of the calendar month except for every Quarter end
i.e. for March 31, June 30, Sept 30 and Dec 31 of the year the fiscal month ends on the last day of that respective
quarter.
I need a function or a query that calculates the fiscal month for any given date of the form mm/dd/yyyy e.g. 10/25/2012
Any help would be much appreciated.

解决方案

Test it (version for MS SQL Server 20005):

DECLARE @startDate DATETIME
DECLARE @endDate DATETIME

SET DATEFORMAT ymd;

SET @startDate = CONVERT(DATETIME, CONVERT(VARCHAR(10),YEAR(GETDATE())) + '-' + CONVERT(VARCHAR(10),MONTH(GETDATE())) + '-01')
SET @endDate = DATEADD(dd,-1,DATEADD(mm,1,@startDate))

--comment below lines to change to current month
SET @startDate = '2013-06-01'
SET @endDate = '2013-06-30'
--SELECT @startDate AS sDate, @endDate AS eDate

;WITH fullmonth AS
(
	SELECT @startDate AS aDate, DATENAME(dw,@startDate) AS NameOfDate
	UNION ALL
	SELECT DATEADD(dd,1,aDate) AS aDate, DATENAME(dw,DATEADD(dd,1,aDate)) AS NameOfDate
	FROM fullmonth
	WHERE aDate<@endDate
)
SELECT CONVERT(VARCHAR(10),aDate,121) AS aDate, NameOfDate
FROM (
	SELECT *,
		(SELECT MIN(aDate) FROM fullmonth WHERE NameOfDate = 'Wednesday') AS MinDate,
		(SELECT MAX(aDate) FROM fullmonth  WHERE NameOfDate = 'Wednesday' AND MONTH(aDate) NOT IN (3,6,9,12)) AS MaxDate
	FROM fullmonth
	) AS T
WHERE aDate BETWEEN MinDate AND COALESCE(MaxDate, @endDate)



Above code generates set of dates for actual month ;)

2013-06-05	Wednesday
2013-06-06	Thursday
2013-06-07	Friday
2013-06-08	Saturday
2013-06-09	Sunday
2013-06-10	Monday
2013-06-11	Tuesday
2013-06-12	Wednesday
2013-06-13	Thursday
2013-06-14	Friday
2013-06-15	Saturday
2013-06-16	Sunday
2013-06-17	Monday
2013-06-18	Tuesday
2013-06-19	Wednesday
2013-06-20	Thursday
2013-06-21	Friday
2013-06-22	Saturday
2013-06-23	Sunday
2013-06-24	Monday
2013-06-25	Tuesday
2013-06-26	Wednesday
2013-06-27	Thursday
2013-06-28	Friday
2013-06-29	Saturday
2013-06-30	Sunday


这篇关于计算日历年的会计月。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆