今天協助排查異常數據,發現是如下類似代碼產生的:
to_date(col_name,'yyyymmdd'),其中col_name是date類型。
這個代碼運行后,結果是:2018-11-16的date類型數據轉換后變成了2017-11-01。
查閱官方文檔:
https://www.postgresql.org/docs/8.3/functions-formatting.html
to_date函數的參數為字符串類型,所以上面的代碼是等價於下面的代碼:
select TO_DATE('2018-11-16' ,'YYYYMMDD')
執行后結果與預想的一致:轉換后為2017-11-01。
將同樣的代碼轉換成oracle的語法:select TO_DATE('2018-11-16' ,'YYYYMMDD') from dual;
執行結果是:直接提示格式錯誤。
原因分析:從結果看,是to_date函數邏輯就是這樣子的,沒有完善的容錯或止錯處理,具體情況需要查看源碼。
解決方法:對於類型轉換的函數,要查閱資料清楚函數的使用方法,正確的使用函數。