我寫一些ETL獲取數據了傳統的Oracle數據庫,並納入分析服務等SQL Server數據庫Oracle數字爲TIME
遺留的Oracle數據庫存儲若干時間的列數(4,2) 。
9 = 09:00
1.2 = 01:20
11.53 = 11:53
是否有任何內置的函數將它轉換爲時間數據類型?有沒有人遇到過這個?你是如何解決它的?
感謝
我寫一些ETL獲取數據了傳統的Oracle數據庫,並納入分析服務等SQL Server數據庫Oracle數字爲TIME
遺留的Oracle數據庫存儲若干時間的列數(4,2) 。
9 = 09:00
1.2 = 01:20
11.53 = 11:53
是否有任何內置的函數將它轉換爲時間數據類型?有沒有人遇到過這個?你是如何解決它的?
感謝
Oracle沒有一個TIME
數據類型 - 它有DATE
或TIMESTAMP
這兩者有一個日期和時間部分。
的Oracle 11g R2架構設置:
CREATE TABLE times (time) AS
SELECT 9 FROM DUAL
UNION ALL SELECT 1.2 FROM DUAL
UNION ALL SELECT 15.53 FROM DUAL
UNION ALL SELECT 24.62 FROM DUAL;
查詢1 - 獲取正確的時間成分對作爲數字有效時間:
SELECT time,
TO_DATE(TO_CHAR(time, '00.00'), 'HH24.MI') AS parsed_time
FROM times
WHERE REGEXP_LIKE(TO_CHAR(time, '00.00'), '([01]\d|2[0-3]).[0-5]\d')
| TIME | PARSED_TIME |
|-------|-----------------------------|
| 9 | September, 01 2015 09:00:00 |
| 1.2 | September, 01 2015 01:20:00 |
| 15.53 | September, 01 2015 15:53:00 |
查詢2 - 獲取正確的時間組件,用於這與今天的日期有效時間數字:
SELECT time,
TO_DATE(TO_CHAR(SYSDATE, 'YYYY-MM-DD') || ' ' || TO_CHAR(time, '00.00'), 'YYYY-MM-DD HH24.MI') AS parsed_time
FROM times
WHERE REGEXP_LIKE(TO_CHAR(time, '00.00'), '([01]\d|2[0-3]).[0-5]\d')
| TIME | PARSED_TIME |
|-------|-----------------------------|
| 9 | September, 28 2015 09:00:00 |
| 1.2 | September, 28 2015 01:20:00 |
| 15.53 | September, 28 2015 15:53:00 |
查詢3 - 獲取任意數小時的正確時間分量(單位部分)和分鐘(小數部分):
SELECT time,
TRUNC(SYSDATE) + TRUNC(time)/24 + (time - TRUNC(time)) * 100/60/ 24 AS parsed_time
FROM times
| TIME | PARSED_TIME |
|-------|-----------------------------|
| 9 | September, 28 2015 09:00:00 |
| 1.2 | September, 28 2015 01:20:00 |
| 15.53 | September, 28 2015 15:53:00 |
| 24.62 | September, 29 2015 01:02:00 |
EDIT2:更正查詢按MT0。當你在EDIT1之間,而不是.
with tbl as(
select 9 as tf from dual union all
select 1.2 from dual union all
select 11.53 as tf from dual
)
select TO_DATE(TO_CHAR(replace(to_char(tf),':','.'), '00.00'), 'HH24.MI') AS time from tbl
有:
這也將照顧情景:它只會爲你給的值工作。如果你有一些東西,是不是有效的時間,那麼它將無法說
ORA-01850: hour must be between 0 and 23
or
ORA-01851: minutes must be between 0 and 59
什麼28.78? –
我不認爲'NUMERIC'會存儲'11:53'。 –
Oracle沒有'TIME'數據類型 - 它具有'DATE'或'TIMESTAMP',它們都有日期和時間組件。 – MT0