1. 程式人生 > >ORA-01830: 日期格式圖片在轉換整個輸入字串之前結束解決方

ORA-01830: 日期格式圖片在轉換整個輸入字串之前結束解決方

例如to_date('2014/1/1 12:00','YYYY/MM/DD'),由於字串超出了YYYY/MM/DD的範圍,就會報1830的錯誤

轉載於:http://blog.csdn.net/sinat_19435069/article/details/47022121#

事件

今天做專案的時候,編寫plsql指令碼時遇到一個日期轉換的問題,如果在plsql除錯時,指令碼可以正常執行,但是程式呼叫時,就會報錯ORA-01830: 日期格式圖片在轉換整個輸入字串之前結束

to_date函式

to_date函式用於字串轉日期,與to_char函式剛好相反。to_date形如

--oracle 為了區分分鐘和月份,月份以mi表示
to_date('2004-05-07 13:23:44','yyyy-mm-dd hh24:mi:ss') 
to_date('2004-05-07','yyyy-mm-dd')

引數1是源字串,引數2是要轉換成的日期形式。但是to_date限制兩者精確度須一致,比如to_date(‘2004-05-07 13:23:44’,’yyyy-mm-dd’)這個就無法轉換。

我手工執行時傳入的是’yyyy-mm-dd’這種形式的,而程式呼叫時傳入值精確到秒,就報錯了,解決辦法就是用substr擷取引數的年月日部分。

示例程式碼

    --plsql 定義變數this_date
    --start_date為varchar2型別
    select to_date(start_date,'yyyy-mm-dd')
    into this_date
    from dual

以上指令碼start_date長度為10(即形式為年-月-日),則可以成功執行,如果精確到時分秒甚至更長,則無法轉換為’yyyy-mm-dd’的形式,報出如題錯誤,解決辦法如下

    --擷取start_date年月日部分使用
    select to_date(substr(start_date,1,10),'yyyy-mm-dd')
    into this_date
    from dual