[英]incorrect date time format in Oracle DB, convert to hours and minutes
不要問我為什么,但出於某種原因,我們有一個格式錯誤的日期時間列,我需要幫助進行轉換。
來自 DB 的示例時間戳:01-OCT-20 12.18.44.000000000 AM
在上面的例子中,小時實際上是 18,分鍾是 44。
不確定這是如何發生的 12 是所有內容的默認設置。 我想要做的就是從 2 個時間戳中獲得 HH:MM 的差異,但我不知道如何正確轉換它,小時在分鍾部分,分鍾在秒部分。
我正在尋找的示例:
01-OCT-20 12.18.44.000000000 上午 - 01-OCT-20 12.12.42.000000000 上午
輸出: 06:02 。 所以在這種情況下時間跨度為 6 小時 2 分鍾。
謝謝,
在上面的例子中,小時實際上是 18,分鍾是 44。
不確定這是如何發生的 12 是所有內容的默認設置。 我想要做的就是從 2 個時間戳中獲得 HH:MM 的差異,但我不知道如何正確轉換它,小時在分鍾部分,分鍾在秒部分。
因此,要獲得時差,您可以使用:
SELECT (value - TRUNC(value))*59 AS difference,
value + (value - TRUNC(value))*59 AS updated_value
FROM table_name;
因此,對於您的示例數據:
CREATE TABLE table_name ( value ) AS
SELECT TO_TIMESTAMP( '01-OCT-20 12.18.44.000000000 AM', 'DD-MON-RR HH12.MI.SS.FF9 AM' ) FROM DUAL
然后輸出是:
\n區別 | UPDATED_VALUE \n :---------------------------- | :-------------------------\n +000000000 18:25:16.000000000 | 2020-10-01 18:44:00.000000\n
db<> 在這里擺弄
如果您想比較兩個錯誤的值,只需從另一個中減去一個時間戳並乘以 60(假設小時總是12 AM
或 24 小時制中的00
):
SELECT (value1 - value2) * 60 AS difference,
value1,
value1 + (value1 - TRUNC(value1))*59 AS updated_value1,
value2,
value2 + (value2 - TRUNC(value2))*59 AS updated_value2
FROM table_name;
因此,對於樣本數據:
CREATE TABLE table_name ( value1, value2 ) AS
SELECT TO_TIMESTAMP( '01-OCT-20 12.18.44.000000000 AM', 'DD-MON-RR HH12.MI.SS.FF9 AM' ),
TO_TIMESTAMP( '01-OCT-20 12.12.42.000000000 AM', 'DD-MON-RR HH12.MI.SS.FF9 AM' )
FROM DUAL
輸出是:
\n區別 | VALUE1 | UPDATED_VALUE1 | VALUE2 | UPDATED_VALUE2 \n :---------------------------- | :------------------------- | :------------------------- | :------------------------- | :-------------------------\n +000000000 06:02:00.000000000 | 2020-10-01 00:18:44.000000 | 2020-10-01 18:44:00.000000 | 2020-10-01 00:12:42.000000 | 2020-10-01 12:42:00.000000\n
這給出了 6 小時 2 分鍾的差異。
db<> 在這里擺弄
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.