DB2的substr錯誤問題

2021-10-20 04:11:04 字數 799 閱讀 6340

db2使用substr函式時,當需要擷取的字段長度不滿足擷取的長度時,會出現sqlcode=-138,sqlstate=22011的錯誤。比如:

substr(

'12345',1

,8)substr(

'12345',3

,4)

這兩種寫法都會導致sql執行失敗。

在實際使用過程中,需要擷取的資料可能只有部分超長,要實現對超長資料的擷取可以通過以下的方法。

解決辦法

(1)可以通過在資料末尾新增擷取長度的空格,擷取後再trim的方式。這種方式在資料本身的末尾就有空格等可能被trim的字元時不適用。

trim(substr(concat(

'12345'

,' '),

1,8)

)#8個空格

(2)可以通過case when的方式,先判斷資料長度,再決定是否需要擷取。

case

when length(

'12345'

)>

8then substr(concat(

'12345'

,' '),

1,8)

else

'12345'

end

這裡有個地方比較特殊,就是資料長度小於8,即使最終的結果不擷取,但是then後面不使用concat方式補充字元長度,sql依然會出現sqlcode=-138,sqlstate=22011的錯誤。

DB2 和 oracle 的 substr區別

db2 的 substr 方法 語法 substr arg1,pos,substr函式返回arg1中pos位置開始的length個字元,如果pos位置開始沒有字元,則返回空格 如果沒有指定length,則返回剩餘的字元。oracle 的 substr 方法 1.substr str,num1,num...

DB2常見的幾種錯誤

1.encoding not supported 原因 sun jdk有兩種編碼集 一種是基本編碼集 包含在lib rt.jar中 另外一種是擴充套件的編碼集 包含在lib charsets.jar中 之所以有這種錯誤是因為資料庫伺服器的 頁在擴充套件編碼集中,但是jdk中沒有安裝擴充套件編碼集。解...

db2常見的錯誤號

sqlcode sqlstate 說明 000 00000 sql語句成功完成 01 sql語句成功完成,但是有警告 012 01545 未限定的列名被解釋為乙個有相互關係的引用 098 01568 動態sql語句用分號結束 100 02000 沒有找到滿足sql語句的行 110 01561 用da...