在 Oracle 資料庫中,不能直接將字串當作時間比對,例如下面的這個 SQL 語法無法執行:
錯誤訊息如下:
正確比較日期時間應該要使用 TO_DATE 函式將文字轉換為日期
通常我們比較常用的日期格式代號為 yyyy-MM-dd HH:mm:ss ,而在 Oracle 中因為不分大小寫,為了怕月份和分鐘搞混,於是就使用 MI 代替分鐘。
參考資料:
SQL Language Reference - TO_DATE
SQL Language Reference - Format Models
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
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com