我正在尝试更新一个存储过程,该过程确定从收到票时起的响应时间。在表中,我有收到票时的时间戳(ref_dttm TIMESTAMP WITHOUT TIME ZONE)和第一次响应票时的时间戳(first_action_dttm TIMESTAMP WITHOUT TIME ZONE)。在计算响应时间时,我需要考虑营业时间、周末和假期休息时间。
目前,该函数计算间隔并可以减去他们的营业时间,但我似乎无法找到排除周末和节假日的方法。基本上我需要每周减少 15 小时(0900-1800 开放)和每个周末和节假日的 24 小时。
给定收到票的星期几和时间跨度:
Select
extract(dow from ref_dttm) as dow,
extract(days from (ref_dttm - first_action_dttm) as days
有没有一种简单的方法来确定已经过去了多少个周末?
这是我到目前为止所拥有的 - 它每天减去 15 小时,并且不考虑周末:
CREATE TEMP TABLE tmp_ticket_delta ON COMMIT DROP AS
SELECT id,ticket_id,ticket_num
,(ticket_dttm - first_action_dttm) as delta
,extract(days from (ticket_dttm - first_action_dttm)) as days
,ticket_descr
FROM t_tickets
WHERE ticket_action_by > 0
SELECT id,ticket_id,ticket_num,delta,days,ticket_descr,
CASE WHEN days = 0 THEN
CASE WHEN extract(hour from delta) > 15 THEN
--less than one day but outside of business hours so subtract 15 hrs
delta - INTERVAL '15:00:00.000'
ELSE
delta
END
ELSE
CASE WHEN extract(hour from delta) > 15 THEN
--take the total number of hours - closing hours + delta - closed hours
(((days * 24) - (days * 15)) * '1 hour'::INTERVAL) + delta - INTERVAL '15:00:00.000' - (days * '1 day'::INTERVAL)
ELSE
(((days * 24) - (days * 15)) * '1 hour'::INTERVAL) + delta - (days * '1 day'::INTERVAL)
END
END AS adj_diff
FROM tmp_ticket_delta