4
A
回答
18
你列的數據類型TIMESTAMP,像這樣:
SQL> create table mytable (start_time,end_time)
2 as
3 select to_timestamp('2009-05-01 12:34:56','yyyy-mm-dd hh24:mi:ss')
4 , to_timestamp('2009-05-01 23:45:01','yyyy-mm-dd hh24:mi:ss')
5 from dual
6 union all
7 select to_timestamp('2009-05-01 23:45:01','yyyy-mm-dd hh24:mi:ss')
8 , to_timestamp('2009-05-02 01:23:45','yyyy-mm-dd hh24:mi:ss')
9 from dual
10 union all
11 select to_timestamp('2009-05-01 07:00:00','yyyy-mm-dd hh24:mi:ss')
12 , to_timestamp('2009-05-01 08:00:00','yyyy-mm-dd hh24:mi:ss')
13 from dual
14/
Tabel is aangemaakt.
減去另一個時間戳,導致間隔數據類型:
SQL> select start_time
2 , end_time
3 , end_time - start_time time_difference
4 from mytable
5/
START_TIME END_TIME TIME_DIFFERENCE
------------------------------ ------------------------------ ------------------------------
01-05-09 12:34:56,000000000 01-05-09 23:45:01,000000000 +000000000 11:10:05.000000000
01-05-09 23:45:01,000000000 02-05-09 01:23:45,000000000 +000000000 01:38:44.000000000
01-05-09 07:00:00,000000000 01-05-09 08:00:00,000000000 +000000000 01:00:00.000000000
3 rijen zijn geselecteerd.
和間隔時間數據類型不能相加。這是一個惱人的限制:
SQL> select sum(end_time - start_time)
2 from mytable
3/
select sum(end_time - start_time)
*
FOUT in regel 1:
.ORA-00932: inconsistente gegevenstypen: NUMBER verwacht, INTERVAL DAY TO SECOND gekregen
爲了規避這個限制,你可以轉換和計算與秒數,這樣的:
SQL> select start_time
2 , end_time
3 , trunc(end_time) - trunc(start_time) days_difference
4 , to_number(to_char(end_time,'sssss')) - to_number(to_char(start_time,'sssss')) seconds_difference
5 from mytable
6/
START_TIME END_TIME DAYS_DIFFERENCE SECONDS_DIFFERENCE
------------------------------ ------------------------------ --------------- ------------------
01-05-09 12:34:56,000000000 01-05-09 23:45:01,000000000 0 40205
01-05-09 23:45:01,000000000 02-05-09 01:23:45,000000000 1 -80476
01-05-09 07:00:00,000000000 01-05-09 08:00:00,000000000 0 3600
3 rijen zijn geselecteerd.
然後,它們是可以概括正規數
SQL> select sum
2 ( 86400 * (trunc(end_time) - trunc(start_time))
3 + to_number(to_char(end_time,'sssss')) - to_number(to_char(start_time,'sssss'))
4 ) total_time_difference
5 from mytable
6/
TOTAL_TIME_DIFFERENCE
---------------------
49729
1 rij is geselecteerd.
如果你願意,你可以這個數字轉換回間隔:
SQL> select numtodsinterval
2 (sum
3 ( 86400 * (trunc(end_time) - trunc(start_time))
4 + to_number(to_char(end_time,'sssss')) - to_number(to_char(start_time,'sssss'))
5 )
6 , 'second'
7 ) time_difference
8 from mytable
9/
TIME_DIFFERENCE
------------------------------
+000000000 13:48:49.000000000
1 rij is geselecteerd.
Regards, Rob。
1
你可以(至少它的工作原理上的Oracle DB)使用此查詢:
select sum(end_date - start_date) from your_table
2
編輯:前加入TRUNC()求和基於羅布麪包車Wijk出色的答覆。
要找到每行時間:
select
end_date-start_date as DurationDays,
(end_date-start_date)*24 as DurationHours,
(end_date-start_date)*24*60 as DurationMinutes,
(end_date-start_date)*24*60*60 as DurationSeconds
from your_table
要查找的總持續時間:
select
sum(trunc(end_date-start_date)) as TotalDurationDays
from your_table
要在一個查詢一舉兩得:
select
end_date-start_date as DurationDays,
(select sum(trunc(end_date-start_date)) from your_table) as TotalDurationDays
from your_table
2
這對Oracle方法簡單,一個黑客攻擊的一位,但:
select sum((end_timestamp+0) - (start_timestamp+0))
from your_table
結果是天的NUMBER(有小數部分的小時,分鍾和你知道的)。
我不知道什麼時間戳+ 0確實;也許ANSI時間戳被轉換爲Oracle的早期時間戳類型,允許簡單的算術。
相關問題
- 1. SQL持續時間計算
- 2. SQL查詢:計算總計
- 3. SQL查詢,計算時間
- 4. SQL Server中的查詢持續時間估計
- 5. 計算持續時間
- 6. 持續時間計算
- 7. SQL查詢來計算不同事件之間的平均持續時間
- 8. sp持續時間不等於sql profiler中語句持續時間的總和
- 9. sql查詢計算兩個連續行之間的時間差
- 10. 查找連續行和計算持續時間
- 11. SQL查詢計算總
- 12. Hive中的持續時間計算
- 13. 計算sql中兩個日期之間的持續時間
- 14. 計算上最後一行的總持續時間在MySQL
- 15. SQL Server 2005查詢 - 計算總和
- 16. 在NHibernate Profiler中查詢持續時間
- 17. 計算會話持續時間在Kibana
- 18. Microsoft SQL Server計算連續事件之間的總時間
- 19. 計算SQL查詢的執行時間?
- 20. 時間戳和時間間隔:NUMTOYMINTERVAL SYSTDATE計算SQL查詢
- 21. SQL查詢來計算agroup的總和計算
- 22. 如何查詢AudioQueue中的當前時間和持續時間
- 23. 計算一列中的時間戳之間的持續時間
- 24. 使用SQL計算頁面的會話持續時間和時間
- 25. SQL事件探查器持續時間與SSMS持續時間
- 26. 在Google地圖中計算距離和持續時間
- 27. 讀wav文件,計算FO持續時間/ DATA_SIZE總是錯誤
- 28. 由於查看重新計算,LinQ查詢的持續時間很長
- 29. 計算時間總和
- 30. 如何通過Laravel查詢中的鍵來計算持續時間?
當我運行這個查詢它說,不一致的數據類型。我使用oracle作爲數據庫。 – 2009-05-21 09:05:23
這很可能意味着您的start_date和end_date字段的類型不同,但如果您說可以計算每行的時間差異,則情況可能並非如此。 – Sevas 2009-05-21 09:16:05
的數據類型是時間戳 – 2009-05-21 09:17:27