2016-09-26 37 views
-1

我在我的數據庫中有一個表,它有兩列,一個是START_TIME,另一個是END_TIME。這些列的類型爲VARCHAR2SQL Select VARCHAR列類型之間的時間差

我想選擇這兩列之間的時間差。

只是想知道這些列包含什麼樣的數據我已經從下面的這些列中選擇了數據。

這是SELECT DISTINCT start_time FROM table_name結果:

15:20 
22.30 
16:00 
24:00 
07:00 
06:55 
6:45 
23:50 
6.5 
15.20 
19:00 
0:00 
1600 
16 
19 
15:00 
6:50 
7 
15:30 
23.50 
24 
14.75 
23 
15:45 
00:15 

,這是SELECT DISTINCT end_time FROM table_name結果

07:00 
16:00 
24:00 
6:45 
15:35 
07 
00 
16 
08:00 
07:20 
7.25 
15:00 
0700 
7 
15:30 
15 
06:45 
07.00 
24 
15.30 
7:00 
23 
15:45 
00:15 

可以做些什麼?

+1

現在沒有足夠的信息來匹配start_time和end_time。來自同一張表的這兩列(看起來像是這樣,但很確定)? – Linkan

+1

Yuk。你需要解決什麼是寫入表中。你需要重新格式化這些值,以便它們可以被解析爲一個時間,單個數字應該如何解釋 - 什麼是「7」和「6.5」? –

+0

同時向我們顯示兩列的樣品表數據。並顯示使用預期的結果。 – jarlh

回答

-1
select to_date(start_time,'hh24:mi')-to_date(end_time,'hh24:mi') FROM table_name; 
+0

這可能只適用於日期格式爲hh24:mi – Aleksej

+0

雖然此鏈接可能回答問題,但最好是包括答案的基本部分,並提供參考鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/ review/low-quality-posts/13797624) –

+2

@ H.Pauwelynツ:我相信這個答案的問題不同於包含作爲鏈接的答案 – Aleksej

1

您的數據看起來像它包含了各種格式小時。 「14.75」表示小數點是十進制小時。

我建議將所有轉換爲十進制小時。所以,這樣的事情:

select (case when col like '%:%' 
      then cast(regexp_substr(col, '[^:]', 1, 1) as decimal(10, 2)) + cast(right(col, 2) as decimal(10, 2))/100 
      else cast(col as decimal(10, 2)) 
     end) 

然後,您可以將兩者並採取差別得到的時間差 - 你會得到十進制小時。

+0

我試過這個: 'select(case start_time like'%:%' then extract(from start_time hour)+ extract(minute from start_time)/ 60.0 else cast(start_time as decimal(10,2)) end )as cr from pmcaldt' 我得到這個錯誤: 'ORA-30076:提取源的無效提取字段' 我做錯了嗎? –

+0

@FarzadSoltani。 。 。我以某種方式迷惑自己。該列是一個字符串,所以它需要字符串函數,而不是日期/時間函數。 –