现有一个表aaaa 其中 e 是起始时间(包含日期),f 是终止时间(包含日期)要求 求出从起始时间到终止时间具体是多长时间,具体到小时,下班时间不包括在内,每天8:30上班,18点下班,多谢!
处理时长:关闭时间-发起时间(只计营业时间:8:30-18:00),单位:小时;7.5小时工作时长,中午2小时的休息时间12:00到14:00 。
如: 发起时间:2012-12-13 15:40 -- 13号处理时长=15:40 - 8:30 - 2小时(中午午休)
关闭时间:2012-12-16 15:30 -- 16号处理时长=15:30 - 8:30 - 2小时(中午午休) 总时长=5.1小时 + 2*7.5(14,15号处理时长) + 5小时 求一个通用的 函数 来实现该功能
处理时长:关闭时间-发起时间(只计营业时间:8:30-18:00),单位:小时;7.5小时工作时长,中午2小时的休息时间12:00到14:00 。
如: 发起时间:2012-12-13 15:40 -- 13号处理时长=15:40 - 8:30 - 2小时(中午午休)
关闭时间:2012-12-16 15:30 -- 16号处理时长=15:30 - 8:30 - 2小时(中午午休) 总时长=5.1小时 + 2*7.5(14,15号处理时长) + 5小时 求一个通用的 函数 来实现该功能
(startm - 30) * 60 + (endm - 30) * 60 as resulttime
from (select to_char(to_date(startdate, 'yyyy-mm-dd hh24:mi'), 'dd') as startdd,
to_char(to_date(startdate, 'yyyy-mm-dd hh24:mi'), 'hh24') as starth,
to_char(to_date(startdate, 'yyyy-mm-dd hh24:mi'), 'mi') as startm,
to_char(to_date(enddate, 'yyyy-mm-dd hh24:mi'), 'dd') as enddd,
to_char(to_date(enddate, 'yyyy-mm-dd hh24:mi'), 'hh24') as endh,
to_char(to_date(enddate, 'yyyy-mm-dd hh24:mi'), 'mi') as endm
from test)
a.deal_date,
(case
when (datepart('HH', a.apply_date) * 60 +
datepart('MI', a.apply_date)) < 8.5 * 60 and
((datepart('HH', a.deal_date) * 60 +
datepart('MI', a.deal_date)) between 8.5 * 60 and 19 * 60) then
datediff('MI',
a.apply_date,
case
when (datepart('HH', a.deal_date) * 60 +
datepart('MI', a.deal_date)) > 19 * 60 then
to_date(to_char(a.deal_date, 'yyyy-MM-dd') || '19:00',
'yyyy-MM-dd hh24:Mi')
when (datepart('HH', a.deal_date) * 60 +
datepart('MI', a.deal_date)) < 8.5 * 60 then
to_date(to_char(a.deal_date, 'yyyy-MM-dd') || '08:30',
'yyyy-MM-dd hh24:Mi')
else
a.deal_date
end) -
datediff('DD', a.apply_date, a.deal_date) * 13.5 * 60
else
datediff('MI',
case
when (datepart('HH', a.apply_date) * 60 +
datepart('MI', a.apply_date)) < 8.5 * 60 then
to_date(to_char(a.apply_date, 'yyyy-MM-dd') || '08:30',
'yyyy-MM-dd hh24:Mi')
when (datepart('HH', a.apply_date) * 60 +
datepart('MI', a.apply_date)) > 19 * 60 then
to_date(to_char(a.apply_date, 'yyyy-MM-dd') || '19:00',
'yyyy-MM-dd hh24:Mi')
else
a.apply_date
end,
case
when (datepart('HH', a.deal_date) * 60 +
datepart('MI', a.deal_date)) > 19 * 60 then
to_date(to_char(a.deal_date, 'yyyy-MM-dd') || '19:00',
'yyyy-MM-dd hh24:Mi')
when (datepart('HH', a.deal_date) * 60 +
datepart('MI', a.deal_date)) < 8.5 * 60 then
to_date(to_char(a.deal_date, 'yyyy-MM-dd') || '08:30',
'yyyy-MM-dd hh24:Mi')
else
a.deal_date
end) -
datediff('DD', a.apply_date, a.deal_date) * 13.5 * 60
end)
from hfpmos.hffault_business_main a
where a.deal_date is not null;