Sql 计算会计年度

Sql 计算会计年度,sql,Sql,我正在尝试添加一个财政年度列。我们的会计年度如下:第一季度4月6日、第二季度7月9日、第三季度10月12日、第四季度1月3日 我有一列“TimeOfCall”,显示 2013-01-26 07:44:51.000 2014-03-12 13:21:34.000 2015-12-25 16:25:21.000 etc 搜索论坛时,我尝试使用以下内容。2015年12月25日为2016财年。我需要到2015年 case when month(timeofcall) >4 then year

我正在尝试添加一个财政年度列。我们的会计年度如下:第一季度4月6日、第二季度7月9日、第三季度10月12日、第四季度1月3日

我有一列“TimeOfCall”,显示

2013-01-26 07:44:51.000
2014-03-12 13:21:34.000 
2015-12-25 16:25:21.000  etc
搜索论坛时,我尝试使用以下内容。2015年12月25日为2016财年。我需要到2015年

case when month(timeofcall) >4
then year(timeofcall) +1
else year(timeofcall) 
end as fiscal
理想情况下,我希望输出像

TimeoFCall                      Fiscal Year
2013-01-26 07:44:51.000            2012-13
2014-03-12 13:21:34.000            2013-12
2015-12-25 16:25:21.000            2015-16
但这就足够了

TimeoFCall                      Fiscal Year
2013-01-26 07:44:51.000             2012
2014-03-12 13:21:34.000             2013
2015-12-25 16:25:21.000             2015
谢谢

这样行吗?上面写着“如果是四月份或以上,就拿今年,否则就拿上一年”。例如,2015年4月是2015财年,但2015年3月是2014财年

case when month(timeofcall) >= 4
then year(timeofcall)
else year(timeofcall) - 1
end as fiscal
一个简单的解决方案是“减去3个月后提取年份”,例如Oracle语法:

extract(year from add_months(timeofcall,-3))

当然,你也应该有一个日历,在日历中预先计算类似的内容…

似乎添加“会计年度”列只是“通话时间”中的重复信息,因此如果可能,我将避免创建“会计年度”列。相反,每次需要时,最好从“通话时间”计算财政年度。如果这对您的服务器非常有用,请使用某种与数据库分离的缓存。这样,您的数据库就有了所需的最少数据,而“财政年度”之类的派生数据就存在于其他地方。此外,在您的预期输出中,您打算编写
2013-14
,而不是
2013-12
,否?您使用的是哪种DBMS?日期和时间函数差别很大,请问您的DBMS是什么?MySQL?赛贝斯?DB2?博士后?神谕MS SQL Server?Terradata。。。。太棒了,我想就是这样。感谢you@whitz11:太棒了!如果这对你有用,请考虑接受这个答案,检查“嘀嗒”符号,然后回答这个问题。您还可以对有助于鼓励StackOverflow成员继续支持您的评论进行投票。