2016-05-15 55 views
-1

我正在嘗試獲取當前會計年度的第一個日期。在我的情況下財年10月份開始當前會計年度的第一個日期

例子:我需要2015年10月1日

我一般會採用以下方式查詢到獲得本年度的第一天,但​​我怎麼改它會得到財年的第一個日期?

select 
    convert(varchar(12), (
     DateAdd(month, (
     Month(getdate()) - 1) * -1, 
     DateAdd(Day, (
      Day(getdate()) - 1) * -1, 
      getdate()))), 
    103) as StartYear 
+0

你知道當年和月開始財年,爲什麼還需要查詢呢? – niksofteng

回答

0

您可以應用以下邏輯:從當前日期減去9個月,發現今年的1月1日9個月再次加:從當前日期

DATEADD(MONTH, 9, DATEADD(YEAR, DATEDIFF(YEAR, 0, DATEADD(MONTH, -9, GETDATE())), 0)) 
0
  1. 起初減9個月去年(你的Fasical年)。
  2. 然後將年份與0之間的差異作爲您的日期。
  3. 現在將年度差值與0相加以獲得月份的開始。
  4. 最後,您需要添加9個月才能獲得Fasical年的開始月份。
  5. 作爲要求格式「2015年10月1日」中的年份示例。因此,讓你可以使用轉換函數101

    select convert(varchar(12), DATEADD(MONTH, 9, DATEADD(YEAR, DATEDIFF(YEAR, 0, DATEADD(MONTH, -9, GETDATE())), 0)), 101) as StartYear 
    
+0

你可以編輯你提出的答案,以擴展它做什麼以及它如何解決OP? –

0
declare @fiscal  date = '2015-10-01' 

; with dates 
as 
(
    select date = '2015-09-30' union all 
    select date = '2015-10-01' union all 
    select date = '2016-09-30' union all 
    select date = '2016-10-01' 
) 
select *, 
    fiscal = case when date < dateadd(year, year(date) - year(@fiscal), @fiscal) 
      then dateadd(year, year(date) - year(@fiscal) - 1, @fiscal) 
      else dateadd(year, year(date) - year(@fiscal), @fiscal) 
      end 
from dates 

/* result 
date  fiscal 
---------- ---------- 
2015-09-30 2014-10-01 
2015-10-01 2015-10-01 
2016-09-30 2015-10-01 
2016-10-01 2016-10-01 
*/ 
相關問題