在oracle中,有時候需要對時間格式的字符串進行排序
比如說有個字段是TEST_TIME是varchar類型的,但是需要通過它對數據進行排序,就需要對字段進行to_date轉換。但有時候數據中會出現臟數據(不能轉換為date的數據)。導致報錯。報錯如下顯示:
因此需要把臟數據給排除掉或者找出來刪除掉。
因此需要寫一個function把不能轉換位日期的字符串找出來。思路就是把字符串轉換為日期,如果成功就返回'Y',如果報錯,就返回'N'
function如下顯示:
CREATE OR REPLACE FUNCTION F_IS_DATE (I_DATE VARCHAR2) RETURN VARCHAR2 IS V_DATE DATE; BEGIN V_DATE := to_date(I_DATE,'yyyy-mm-dd hh24:mi:ss'); RETURN 'Y'; EXCEPTION WHEN OTHERS THEN RETURN 'N'; END F_IS_DATE;
然后這樣就可以寫出一個篩選不能轉換為日期的字符串了。
sql如下:
select * from SFC_DATAGROUP_DJ where f_is_date(TEST_TIME)='N'
就能找出不能轉換為日期的字符串了
同理:字符串轉小數,字符串轉整數等等都可以用相似的方式篩選出不符合要求的數據。
參考:https://zhidao.baidu.com/question/691902130567092484.html