【问题标题】:Calculate Fiscal Year in Snowflake用雪花计算会计年度
【发布时间】:2022-01-24 01:09:00
【问题描述】:

我正在尝试在 Snowflake 中计算财政年度,但遇到了问题。我要计算的财政年度是从当年的 7 月 1 日到次年的 6 月 30 日。

这是我到目前为止的代码,只是为了获取财政年度的开始日期:

CASE WHEN date_part(month,GETDATE()) <= 6
     THEN YEAR(GETDATE())-1
     ELSE try_cast(EXTRACT('year',current_date()) as varchar) + '-07-01' + 
     END AS FISCAL_YEAR_TEST

每当我尝试将年份提取转换为 varchar 时,我都会收到此错误:

Function TRY_CAST cannot be used with arguments of types NUMBER(4,0) and VARCHAR(16777216)

有没有办法让财政年度日期在 Snowflake 中工作?

【问题讨论】:

  • 请分享一些示例数据:正确答案是什么?
  • 我只是将当前日期作为概念证明。对于今天的日期,我预计日期是“2021-07-01”
  • 这是什么逻辑?请添加几个示例。
  • 当前日期的逻辑需要例如是会计年度日期是'2021-07-01'到'2022-06-30'。

标签: sql snowflake-cloud-data-platform


【解决方案1】:

这应该做你想要的:

select case when quarter(current_date()) > 2 
         then date_from_parts(year(current_date()), 07, 01)
         else date_from_parts(year(current_date()) -1, 07, 01)
       end as Fiscalyearbegins
      ,case when quarter(current_date()) > 2 
         then date_from_parts(year(current_date()) +1, 06, 31)
         else date_from_parts(year(current_date()) ,06, 31)
       end as FiscalyearEnds

【讨论】:

  • 这与我要找的很接近,但我需要将结果设为像 08/01/2021 这样的日期,即财政年度是 07/01/2021 到 06/ 2021 年 3 月 30 日。
  • @Perdue 嗯.. 无论一年中的哪一天,您都希望返回一个特定的日期?我不确定我是否理解正确。添加一些示例
  • 是的,所以在我上面的例子中,如果日期是 08/01/2021,那么财政年度开始日期将是 07/01/2021,财政年度结束日期是 06/30/ 2022.
  • @Perdue 查看更新的答案
  • 这实际上是我玩了一段时间后得出的答案。 :) 感谢您确认我在正确的道路上。
【解决方案2】:

请检查以下查询:

select
    date_trunc(MONTH,add_months(current_date::date, -5))::date as fiscal_start_month,
    last_day(add_months(fiscal_start_month,11))::date fiscal_lastday;

您还可以将硬编码值 5 替换为动态变量。

【讨论】:

  • 这真的很接近我的需要,但如果有像 2021 年 8 月 1 日这样的日期,那么财政年度将是 2021 年 7 月 1 日到2022 年 6 月 30 日。
【解决方案3】:

使用DATEADD推送年份可以稍微简化一下逻辑。

SELECT
    CalendarDate
    , YEAR(DATEADD(MONTH, 6, CalendarDate)) AS FiscalYear
    , DATE_FROM_PARTS(YEAR(DATEADD(MONTH, 6, CalendarDate)) - 1, 07, 01) FiscalYearBegin
    , DATE_FROM_PARTS(YEAR(DATEADD(MONTH, 6, CalendarDate)), 06, 30) AS FiscalYearEnd
FROM
    (
      SELECT CAST('01/01/2021' AS DATE) AS CalendarDate
      UNION
      SELECT CAST('02/01/2021' AS DATE) AS CalendarDate
      UNION
      SELECT CAST('03/01/2021' AS DATE) AS CalendarDate
      UNION
      SELECT CAST('04/01/2021' AS DATE) AS CalendarDate
      UNION
      SELECT CAST('05/01/2021' AS DATE) AS CalendarDate
      UNION
      SELECT CAST('06/01/2021' AS DATE) AS CalendarDate
      UNION
      SELECT CAST('07/01/2021' AS DATE) AS CalendarDate
      UNION
      SELECT CAST('08/01/2021' AS DATE) AS CalendarDate
      UNION
      SELECT CAST('09/01/2021' AS DATE) AS CalendarDate
      UNION
      SELECT CAST('10/01/2021' AS DATE) AS CalendarDate
      UNION
      SELECT CAST('11/01/2021' AS DATE) AS CalendarDate
      UNION
      SELECT CAST('12/01/2021' AS DATE) AS CalendarDate
    ) AS Dates;

【讨论】:

    猜你喜欢
    • 2020-02-25
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多