簡體   English   中英

無法在 oracle sql 中將時間戳轉換為字符或日期

[英]Not able to convert timestamp to char or date in oracle sql

我需要將時間戳值(19-01-21 09:15:00.000000 PM)轉換為日期格式('YYYY/MM/DD HH24:MI:SS')。 我正在嘗試使用 to_char function 來完成它(將其轉換為 varchar 並在 TO_DATE 函數中使用它)。 我在 to_char function 中遇到錯誤。 這是可行的方法還是請建議是否有更好的方法

select TO_CHAR('19-01-21 09:15:00.000000 PM','DD-MM-YY HH:MI:SSxFF AM') from dual; 
select TO_DATE(TO_CHAR('19-01-21 09:15:00.000000 PM','DD-MM-YYYY HH:MI:SSxFF AM'),'YYYY/MM/DD HH24:MI:SS'  ) from dual;

我收到以下錯誤:

ORA-01722: invalid number
01722. 00000 -  "invalid number"
*Cause:    The specified number was invalid.
*Action:   Specify a valid number.

'19-01-21 09:15:00.000000 PM'是字符串文字; 它不是DATETIMESTAMP數據類型。

由於您的字符串有小數秒,您可以使用TO_TIMESTAMP將其轉換為TIMESTAMP數據類型:

SELECT TO_TIMESTAMP( '19-01-21 09:15:00.000000 PM', 'DD-MM-RR HH12:MI:SS.FF6 AM' )
         AS timestamp_value
FROM   DUAL;

哪個輸出:

  |  TIMESTAMP_VALUE |  |:---------------------------- |  |  2021-01-19 21:15:00.000000000 |

如果您希望將該值作為DATE數據類型,那么您可以采用之前的 output 並將其CASTDATE

SELECT CAST(
         TO_TIMESTAMP( '19-01-21 09:15:00.000000 PM', 'DD-MM-RR HH12:MI:SS.FF6 AM' )
         AS DATE
       ) AS date_value
FROM   DUAL;

或者,如果小數秒總是為零:

SELECT TO_DATE( '19-01-21 09:15:00.000000 PM', 'DD-MM-RR HH12:MI:SS".000000" AM' )
         AS date_value
FROM   DUAL;

其中output:

  |  DATE_VALUE |  |:----------------- |  |  2021-01-19 21:15:00 |

db<> 在這里擺弄


我需要將時間戳值轉換為date / varchar值。

如果要將值格式化為YYYY/MM/DD HH24:MI:SS則可以使用TO_TIMESTAMP然后TO_CHAR

SELECT TO_CHAR(
         TO_TIMESTAMP( '19-01-21 09:15:00.000000 PM', 'DD-MM-RR HH12:MI:SS.FF6 AM' ),
         'YYYY/MM/DD HH24:MI:SS'
       ) AS date_string
FROM   DUAL;

哪個輸出:

  |  DATE_STRING |  |:----------------- |  |  2021/01/19 21:15:00 |

(注意:這會輸出字符串數據類型而不是DATE數據類型;如果您想要DATE數據類型,請使用第二個或第三個示例。)

db<> 在這里擺弄

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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