2017-09-20 35 views
0

我有一個包含日期(日期),剩餘時間(varchar2(4))和到達時間(varchar2(4))的表格。所用時間爲hhmm 24小時制。如果一個人每天旅行3次,那麼在一天中計算總旅行時間的查詢是什麼? 我正在使用oracle 11g。請幫助。謝謝。在SQL查詢中的一天,其中24小時格式爲hhmm的時間計算

+1

你嘗試過這麼遠嗎?請發佈您的查詢 – etsa

+1

你爲什麼使用varchar列? Oracle是否有任何時間/間隔數據類型? – jarlh

+0

如果一個旅程結束午夜會發生什麼 - 所以到達'時間'早於'時間'?你爲什麼不只是將數據類型爲'date'的左邊和到達都存儲起來? –

回答

0

值轉換爲數字,並在幾分鐘內報告:

select to_number(substring(time, 1, 2))*60 + to_number(substring(time, 3, 2)) as minutes 

您的查詢看起來是這樣的:

select person, sum(to_number(substring(time, 1, 2))*60 + to_number(substring(time, 3, 2))) as minutes 
from t 
group by person; 

我認爲沒有理由將此轉換回字符串 - 或甚至將該值存儲爲字符串而不是數字。但是如果你需要的話,你可以反過來獲得一個字符串。

0

有2個答案,如果你只想在日期則是可以做到的總結時間: -

select curr_date, 
sum(24 * (to_date(arrival_time, 'HH24:mi:ss')- to_date(left_time, 'HH24:mi:ss'))) as difference 
from sql_prac group by curr_date,arrival_time,left_time; 

樣本輸出如下: -

select curr_date,left_time,arrival_time from sql_prac; 

CURR_DATE LEFT_TIME   ARRIVAL_TIME  
--------- -------------------- -------------------- 
30-JUN-17 00:00:00    15:00:00    
30-JUL-17 03:30:00    11:30:00    
30-AUG-17 03:00:00    12:30:00    
30-SEP-17 04:00:00    17:00:00    
30-JUN-17 00:00:00    15:00:00    
30-JUL-17 03:30:00    11:30:00    
30-AUG-17 03:00:00    12:30:00    
30-SEP-17 04:00:00    17:00:00    
30-SEP-17 04:00:00    17:00:00   

9行選擇

select curr_date,sum(24 * (to_date(arrival_time, 'HH24:mi:ss')- to_date(left_time, 'HH24:mi:ss'))) as difference 
from sql_prac group by curr_date,arrival_time,left_time; 

CURR_DATE DIFFERENCE 
--------- ---------- 
30-JUN-17   30 
30-JUL-17   16 
30-SEP-17   39 
30-AUG-17   19 
0

如果要通過人,日期,那麼這是可以做到的來概括: -

select dept,curr_date,sum(24 * (to_date(arrival_time, 'HH24:mi:ss')- to_date(left_time, 'HH24:mi:ss'))) as difference 
from sql_prac group by dept,curr_date,arrival_time,left_time order by Dept; 

示例輸出如下: -

  1. 數據在表是: -

    選擇部,curr_date,left_time,從sql_prac ARRIVAL_TIME;

DEPT CURR_DATE LEFT_TIME ARRIVAL_TIME

-------------------- --------- -------------------- -------------------- 
A     30-SEP-17 04:00:00    17:00:00    
B     30-SEP-17 04:00:00    17:00:00    
C     30-AUG-17 03:00:00    12:30:00    
D     30-DEC-17 04:00:00    17:00:00    
A     30-SEP-17 04:00:00    17:00:00    
B     30-JUL-17 03:30:00    11:30:00    
C     30-AUG-17 03:00:00    12:30:00    
D     30-SEP-17 04:00:00    17:00:00    
R     30-SEP-17 04:00:00    17:00:00 
使用查詢
  • 數據取出

    選擇部,curr_date,總和(24 * (to_date(arrival_time,'HH24:mi:ss') - to_date(left_time,'HH24:mi:ss')))作爲區別 from sql_prac group by dept,curr_date,arr ival_time,按部門排序的left_time;

  • DEPT     CURR_DATE DIFFERENCE 
    -------------------- --------- ---------- 
    A     30-SEP-17   26 
    B     30-JUL-17   8 
    B     30-SEP-17   13 
    C     30-AUG-17   19 
    D     30-SEP-17   13 
    D     30-DEC-17   13 
    R     30-SEP-17   13 
    
    相關問題