0

DateTime 型の列が 2 つあります。最初のものはプロセスが開始されたときの DateTime を格納し、もう 1 つはそのプロセスが終了したときの DateTime を格納します。仕事を完了するために費やされた総労働時間を計算したい。営業時間は午前10時から午後7時までで、日曜日は休みです。

ここに私が書き留めたいくつかのスニペットがあります:

       SELECT col1, col2, floor(((date2-date1)*24*60*60)/3600)
       || ' HOURS ' ||
       floor((((date2-date1)*24*60*60) -
       floor(((date2-date1)*24*60*60)/3600)*3600)/60)
       || ' MINUTES ' ||
       round((((date2-date1)*24*60*60) -
       Floor(((date2-date1)*24*60*60)/3600)*3600 -
       (floor((((date2-date1)*24*60*60) -
       floor(((date2-date1)*24*60*60)/3600)*3600)/60)*60) ))
       || ' SECS ' Time_Difference
       From Table_Name;

と、

       Select To_Number(To_Char(date1, 'HH24')) || ':'
       ||   to_number(to_char(date1, 'MI')) || ':'||
       to_number(to_char(date1, 'SS')) from Table_Name

助けてください。


あなたが言及した上記の解決策に対して、これが結果です!

START DATE          DAY     FINISH DATE     DAY  Date Diff   Total Hours   Work Hours 

07-AUG-12 21:55:21  TUE 08-AUG-12 11:09:10  WED 0 13:13:49.0        13   13 
13-NOV-12 15:45:25  TUE 14-NOV-12 10:41:42  WED 0 18:56:17.0        18   18 
20-DEC-12 20:31:03  THU 21-DEC-12 11:03:36  FRI 0 14:32:33.0        14   14 
14-MAR-13 20:39:00  THU 15-MAR-13 11:00:04  FRI 0 14:21:4.0         14   14 
07-JUN-12 21:17:36  THU 08-JUN-12 11:02:23  FRI 0 13:44:47.0        13   13 
18-SEP-12 20:48:27  TUE 19-SEP-12 11:07:35  WED 0 14:19:8.0         14   14 

新しいシナリオ: https://stackoverflow.com/questions/17248741/how-to-get-business-hours-between-two-dates-in-oracle

4

2 に答える 2

0

2 つの日付の時間差を取り、非稼働時間の量を 2 日間の日数で減らすことができます。この例を考えてみましょう:

create table t1 (
    start_hour date , finish_hour date);

insert into t1 values (
  to_date('01/01/2013 12:00:00','dd/mm/yyyy hh24:mi:ss'),
  to_date('01/01/2013 15:00:00','dd/mm/yyyy hh24:mi:ss'));

insert into t1 values (
  to_date('01/01/2013 12:00:00','dd/mm/yyyy hh24:mi:ss'),
  to_date('02/01/2013 15:00:00','dd/mm/yyyy hh24:mi:ss'));

insert into t1 values (
  to_date('01/01/2013 18:00:00','dd/mm/yyyy hh24:mi:ss'),
  to_date('03/01/2013 11:00:00','dd/mm/yyyy hh24:mi:ss'));


with x as (
select start_hour ,finish_hour , 
      (finish_hour - start_hour) * 24 hour_diff , 
       trunc(finish_hour) - trunc(start_hour) as day_diff
from t1
) 
select  start_hour , finish_hour , 
        hour_diff - 15 * day_diff as working_hours 
from x;

|                     START_HOUR |                    FINISH_HOUR | WORKING_HOURS |
-----------------------------------------------------------------------------------
| January, 01 2013 12:00:00+0000 | January, 01 2013 15:00:00+0000 |             3 |
| January, 01 2013 12:00:00+0000 | January, 02 2013 15:00:00+0000 |            12 |
| January, 01 2013 18:00:00+0000 | January, 03 2013 11:00:00+0000 |            11 |
于 2013-06-15T07:56:08.393 に答える