我有一个格式为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