Oracle 文字轉日期 TO_DATE

在 Oracle 資料庫中,不能直接將字串當作時間比對,例如下面的這個 SQL 語法無法執行:
    
select * from table_name where my_timestamp < '2023-06-04 23:59:59'
    

錯誤訊息如下:
    
[22008][1843] ORA-01843: not a valid month Position: 68
    

正確比較日期時間應該要使用 TO_DATE 函式將文字轉換為日期
    
select * from table_name where my_timestamp < TO_DATE('2023-06-04 23:59:59', 'YYYY-MM-DD HH24:MI:SS')
    

通常我們比較常用的日期格式代號為 yyyy-MM-dd HH:mm:ss ,而在 Oracle 中因為不分大小寫,為了怕月份和分鐘搞混,於是就使用 MI 代替分鐘。

常見日期時間格式字串

  • YYYY: 4 位數的西元年
  • Q: 季節(1-4),1 月至 3月為 1
  • MM: 月份數字
  • MON: 月份縮寫
  • MONTH: 月份名稱
  • DD: 日(1-31)
  • DDD: 一年中的第幾天(1-366)
  • HH 和 HH12 都表示 12 小時制的小時 (1-12)
  • MI: 分鐘
  • SS: 秒(0-59)


參考資料:
SQL Language Reference - TO_DATE
SQL Language Reference - Format Models

留言