關於oracle數據庫查詢出的日期帶毫秒的解決辦法

    近期開發遇到一個oracle方面日期查詢的細節問題。在這裏記錄下。

    問題描述:從oracle數據庫查詢一張表來獲取記錄裏的日期字段,從數據庫客戶端查看日期格式爲=2019-11-25 00:00:00,由於我在java代碼中對應的接受改日期的字段startDate是string類型,然後利用該日期字段查詢第二張表的記錄,查詢第二張表的sql部分是這麼寫的date = to_date(startDate,'yyyy-MM-dd HH24;MI:SS')。這時候會報錯【ORA-01861:文字與格式字符串不匹配】。

   分析原因:雖然在oracle數據庫客戶端select顯示的日期格式是2019-11-25 00:00:00,但是轉換成string後在java代碼中是這個格式;2019-11-25 00:00:00.0,多了一個毫秒展示。原因是數據庫日期格式設置問題,當然這個也可以更改,但是更改數據庫字段格式還是風險有點大的。那麼在查詢第二張表時,我們設定了日期轉換格式是yyyy-MM-dd HH24;MI:SS,所以會報錯。

   解決辦法:在查詢第一張表時sql改爲select TO_NUMBER(NVL(TO_CHAR(startDate,'J'),'0')) from tab1;

                  再查詢第二張表時sql改爲 select * from tab2 where startDate= TO_DATE(DECODE(startDate, 0, NULL, startDate), 'J')

 

  這個思路是在查詢第一張表時先把日期轉換成數字,再查詢第二張表時在把數字轉化成日期。這樣做的好處是,不管數據庫中的日期格式是什麼,都會滿足查詢需求。有的同學可能會想到,在java代碼中startDate進行截取處理,這種方法兼容性不好。

  寫在最後,如果java代碼接受startDate是Date類型,那麼在第二次查詢時也就不涉及到類型轉換。就不會出現這個問題。

發佈了62 篇原創文章 · 獲贊 28 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章