计算从日期到日期结束的hh:mm:ss格式差异的最佳方法是什么



我有一个格式为2019-10-11 16:47:44.042的日期我需要计算一天结束时的差异。

例如:07:12:24

使用SQL(在Snowflake中(进行此计算的最佳方法是什么

您可以使用dateadd计算下一个日期,然后使用datediff查找到第二天的秒数,并将结果转换为时间戳。

set t = to_timestamp('2019-10-11 16:47:44.042');
select to_varchar( to_timestamp( DATEDIFF('ms', $t,  dateadd( 'day',1,  date_trunc('DAY', $t )) ) / 1000 ), 'HH24:MI:SS.FF3');

除以1000是一个你在其他地方找不到的技巧!:(

您可以根据上面的公式创建一个函数:

create or replace function timetoendofday ( t timestamp )
returns varchar
as 'select to_varchar( to_timestamp( DATEDIFF(''ms'', t, dateadd( ''day'',1,  date_trunc(''DAY'', t )) ) / 1000 ), ''HH24:MI:SS.FF3'')';

现在使用起来很简单:

select timetoendofday( '2019-10-11 16:47:44.042' );
-- returns 07:12:15.958

您可以计算时间戳和第二天开始之间的时间差(以秒为单位(,然后将其转换为时间戳和时间,使其具有如下可读格式:

with tab as(
select to_timestamp('2019-10-11 16:47:44.042') ts
)
select to_time(to_timestamp(timediff(second, tab.ts, to_date(tab.ts) + 1)))
from tab
-- returns 07:12:16  

相关内容

  • 没有找到相关文章

最新更新