Redshift中如何计算两个日期列的分钟差值?
计算两个日期时间的分钟差值问题
你的原查询只提取了日期时间中的分钟字段值做差,完全忽略了天、小时的差距,这就是得不到正确结果的原因。比如例子里两个时间的分钟数都是0,相减后绝对值还是0,自然出不来1440分钟。
正确的查询方法
在PostgreSQL中,直接计算两个日期时间的差值,再转换为分钟即可,推荐两种简洁写法:
方法1:利用Epoch秒数转换
select n.ideal_date, n.actual_date, abs(extract(epoch from (n.actual_date - n.ideal_date)) / 60) as minutes from table_date n
- 原理:
actual_date - ideal_date得到两个时间的间隔,extract(epoch from ...)把这个间隔转换成总秒数,除以60就得到总分钟数,abs()确保结果为正。
方法2:直接提取间隔的各时间单位计算
select n.ideal_date, n.actual_date, abs( date_part('day', n.actual_date - n.ideal_date)*24*60 + date_part('hour', n.actual_date - n.ideal_date)*60 + date_part('minute', n.actual_date - n.ideal_date) ) as minutes from table_date n
- 原理:分别提取间隔的天数、小时数、分钟数,转换成分钟后相加,再取绝对值。
验证例子
对于你提供的id=58的记录,两个时间相差1天:
- 方法1中,间隔的Epoch秒数是86400,除以60得到1440分钟;
- 方法2中,天数是1,12460=1440,小时和分钟都是0,总和也是1440分钟,和预期一致。
内容的提问来源于stack exchange,提问作者CerealBox
相关产品推荐
相关产品推荐

