【问题标题】:How to get Day difference between two dates in snowflake如何获取雪花中两个日期之间的日差
【发布时间】:2021-12-29 11:17:35
【问题描述】:

如何在雪花中获得以下两个日期之间的差异。

select datediff(
          day,
          Date('Tue Jan 01 1980 00:00:00 GMT-0800 (Pacific Standard Time)')::timestamp,
          Date('Tue Jan 01 2020 00:00:00 GMT-0800 (Pacific Standard Time)')::timestamp
       );

【问题讨论】:

  • 您提到的函数将返回指定的两个日期之间的天数差。你想做什么或有什么问题?
  • 这里的重点是“问题不在于如何获取日期之间的差异”问题,而是“如何将非标准日期字符串解析为日期/时间戳。

标签: snowflake-cloud-data-platform


【解决方案1】:

我认为时间戳格式无效,时区名称似乎没有必要且难以解析。

我写了一个小函数,从输入中取出前 33 个字符,然后将其转换为时间戳:

create or replace function to_convert_ts ( v varchar )
returns timestamp_tz
as 
$$
select to_timestamp_tz( left(V,33), 'DY MON DD YYYY HH24:MI:SS GMTTZHTZM' )
$$;

select datediff( day, to_convert_ts( 'Tue Jan 01 1980 00:00:00 GMT-0800 (Pacific Standard Time)'), 
                to_convert_ts( 'Tue Jan 01 2020 00:00:00 GMT-0800 (Pacific Standard Time)' ) );
-- returns 14610

【讨论】:

  • 当我读取日期列值(2010-02-04 12:00:00.000)时,我将从表
【解决方案2】:

正如 Gokhan 所说,这确实是一个日期解析问题。可以看出。

select 
    'Tue Jan 01 1980 00:00:00 GMT-0800 (Pacific Standard Time)' as date_str_a,
    'Tue Jan 01 2020 00:00:00 GMT-0800 (Pacific Standard Time)' as date_str_b,
    try_to_date(date_str_a) as date_a,
    try_to_date(date_str_b) as date_b,
    datediff(day, date_a, date_b ) as day_diff;

应该显示日期解析失败,try_to_date 版本如果失败则返回 null,但基本问题也可以通过以下方式看到:

select date('Tue Jan 01 1980 00:00:00 GMT-0800 (Pacific Standard Time)');

应该给出你看到的错误。

Gokhan,展示了如何编写一个函数来在隐藏中进行修剪,您也可以在开放中使用它。 [SUBSTR][1]

这样

select 
    'Tue Jan 01 1980 00:00:00 GMT-0800 (Pacific Standard Time)' as date_str_a,
    'Tue Jan 01 2020 00:00:00 GMT-0800 (Pacific Standard Time)' as date_str_b,
    to_timestamp_tz( left(V,33), date_str_a) as tz_a,
    to_timestamp_tz( left(V,33), date_str_b) as tz_b,
    datediff(day, tz_a, tz_b) as day_diff;

【讨论】:

    猜你喜欢
    • 2021-04-24
    • 1970-01-01
    • 2020-03-22
    • 2017-03-27
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 2014-07-13
    相关资源
    最近更新 更多