【问题标题】:Calculate Fiscal |Year计算财政|年
【发布时间】:2016-01-30 10:41:09
【问题描述】:

我正在尝试添加一个会计年度列。我们的财政年度看起来像这样:Q1 apr-6, Q2 jul-sept, Q3 oct-dec, Q4 jan-mar

我有显示“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

谢谢

【问题讨论】:

  • 似乎添加“会计年度”列只是“通话时间”中的重复信息,所以如果可能的话,我会避免创建“会计年度”列。相反,每次需要时从“通话时间”计算财政年度可能会更好。如果这对您的服务器很有效,请使用某种与您的数据库分开的缓存。这样,您的数据库就有了您需要的最少数据,而诸如“会计年度”之类的派生数据则存在于其他地方。
  • 另外,在您的预期输出中,您的意思是写 2013-14 而不是 2013-12,不是吗?
  • 您使用的是哪个 DBMS?
  • 日期和时间功能差别很大,请问您的 dbms 是什么? MySQL?赛贝斯? DB2?后格雷斯?甲骨文?微软 SQL 服务器?大地数据? ....

标签: sql


【解决方案1】:

这行得通吗?它说“如果 4 月及以上,则取当年,否则取上一年”。例如,2015 年 4 月是 2015 财年,但 2015 年 3 月是 2014 财年。

case when month(timeofcall) >= 4
then year(timeofcall)
else year(timeofcall) - 1
end as fiscal

【讨论】:

  • 太棒了,我想就是这样。谢谢
  • @whitz11:太棒了!如果这对您有用,请考虑通过检查“勾选”符号并投票赞成答案来接受此答案。您还可以对有助于鼓励 StackOverflow 成员继续支持您的评论进行投票。
【解决方案2】:

一个简单的解决方案是“减去 3 个月后提取年份”,例如甲骨文语法:

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

当然,您还应该有一个日历,其中预先计算了类似的事情......

【讨论】:

    猜你喜欢
    • 2012-06-02
    • 1970-01-01
    • 1970-01-01
    • 2018-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多