【问题标题】:How to calculate iso_week_start_date and iso_week_end_date for date dimension?如何计算日期维度的 iso_week_start_date 和 iso_week_end_date?
【发布时间】:2018-03-21 22:34:57
【问题描述】:

作为日历维度的一部分,我需要填充 iso_week_start_date、iso_week_end_date 和 iso_week_number。除了这些字段,我已经能够构建日历维度。谢谢。

【问题讨论】:

    标签: data-modeling data-warehouse dimension snowflake-cloud-data-platform


    【解决方案1】:

    Snowflake 提供DATE_TRUNC(WEEK, ..),可让您获得 ISO 周的第一天。然后加上 6 天给你最后一天。还有DATE_EXTRACT(WEEK, ..)(或简称WEEK(..))

    例如:

    select extract(week, '2017-10-10'::date), date_trunc(week, '2017-10-10'::date), dateadd(day, 6, date_trunc(week, '2017-10-10'::date));
    -----------------------------------+--------------------------------------+-------------------------------------------------------+
     EXTRACT(WEEK, '2017-10-10'::DATE) | DATE_TRUNC(WEEK, '2017-10-10'::DATE) | DATEADD(DAY, 6, DATE_TRUNC(WEEK, '2017-10-10'::DATE)) |
    -----------------------------------+--------------------------------------+-------------------------------------------------------+
     41                                | 2017-10-09                           | 2017-10-15                                            |
    -----------------------------------+--------------------------------------+-------------------------------------------------------+
    

    请记住,ISO 周的语义有点奇怪,请参阅文档了解更多详细信息。

    【讨论】:

    • 谢谢马尔辛。这很有帮助。这是否意味着 Snowflake 原生支持 ISO 日期?那么如何从特定日期获得常规周数(不是 ISO)?有不同的功能吗?我可以在 SF 文档“dayofweek_iso”中找到一个函数。您是否知道任何其他此类功能?我在文档中找不到任何这样的东西。
    • 今天,Snowflake 主要提供基于 ISO 的星期函数:例如,WEEK 返回 ISO 星期。此外,Snowflake 将很快提供其他与周相关的功能。希望这个季度。这应该可以满足您的要求。
    • 顺便说一句,如果您可以提供您希望看到的确切功能,请尽可能详细地添加评论。例如,您希望 12 月 31 日始终属于其一年中的第几周(例如 52 或 53),还是可以属于下一年的第 1 周。
    • 感谢您的跟进。 Ask here 是在 Snowflake 中同时支持常规日期格式和 ISO 日期格式。根据报告类型,我们选择使用 ISO 格式还是常规格式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    相关资源
    最近更新 更多