簡體   English   中英

Oracle DB 中的日期時間格式不正確,轉換為小時和分鍾

[英]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 的差異,但我不知道如何正確轉換它,小時在分鍾部分,分鍾在秒部分。

  • 要將分鍾轉換為小時,您需要乘以 60。
  • 要將秒轉換為分鍾,您還需要乘以 60。
  • 因此,如果您想轉換正確值的時間部分,那么您可以使用自午夜以來的時間並將其全部乘以 60。
  • 如果您想獲得當前時間和正確時間之間的差異(乘以 60 后),那么您需要減去當前時間(可以簡化為乘以 59)。

因此,要獲得時差,您可以使用:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM