【发布时间】:2020-02-11 13:12:40
【问题描述】:
我试图找出两个日期之间的时间差(以分钟为单位),但我希望该差值能够说明商店营业的时间。店铺每天只营业 9 小时,而且只在工作日营业(周末也关门),因此时差应按营业时间计算。
示例:2019 年 7 月 18 日上午 9:50 - 2019 年 7 月 22 日上午 10:02
SELECT date_diff('minute', date_parse('7/18/2019 9:50:00 AM','%m/%d/%Y %h:%i:%s %p'), date_parse('7/22/2019 10:02:00 AM','%m/%d/%Y %h:%i:%s %p'))
这给出的答案是 5772。但我希望答案是 1092。
excel公式为
A1 = 7/18/2019 9:50 AM
B1 = 7/22/2019 10:02 AM
if(OR(A1="",A1="NULL",B1="",B1="NULL"),"",(A1-B1)*24*60 - (days(A1,B1)+1-NETWORKDAYS(A1,B1))*24*60 - (NETWORKDAYS(A1,B1)-1)*15*60)
这个版本适合我,但有更好的方法吗?另外,如果我们可以在 presto 上编写一个函数,我不知道如何在 presto 上编写一个可调用函数。
with working_days AS
(
select count(*) as wd from unnest(sequence (cast('2017-06-07' as date), cast('2017-06-13' as date))) t(x)
WHERE extract (day_of_week from x) < 6
)
select date_diff('minute', cast('2017-06-07 11:19:11.287' as timestamp), cast('2017-06-13 09:53:14.750' as timestamp)) -
((date_diff('day', cast('2017-06-07' as date), cast('2017-06-13' as date))+1 - wd)*24*60 + (wd - 1)*16*60)
FROM working_days
【问题讨论】:
-
这可能是您的解决方案:stackoverflow.com/questions/1839319/…
-
无法使其工作。从 unnest 中选择 x(sequence(cast(date_parse('7/22/2019 10:02:00 AM','%m/%d/%Y %h:%i:%s %p') 作为日期), cast(date_parse('7/22/2019 10:02:00 AM','%m/%d/%Y %h:%i:%s %p') as date))) t(x) 这是也不为我工作!试图看看什么可以工作
标签: postgresql datediff presto date-difference