關於DB2中使用SUBSTR函數出現“SUBSTR函數的第二個或第三個自變量超出范圍。 SQLSTATE=22011”錯誤的解決方法 對於表A,定義如下: CREATE TABLE A ( REMARK VARCHAR(20) ); INSERT INTO A(REMARK) VALUES('ABC'); INSERT INTO A(REMARK) VALUES('DEF'); INSERT INTO A(REMARK) VALUES('HI#JK'); 執行SQL:SELECT SUBSTR(REMARK,1,2) AS REMARK FROM A;返回數據如下: ------------------ | REMARK | ------------------ | AB | | DE | | HI | ------------------ 而執行SQL:SELECT SUBSTR(REMARK,1, (LOCATE( '#', REMARK) -1 ) AS REMARK FROM A; 卻出現錯誤:SUBSTR 函數的第二個或第三個自變量超出范圍。 SQLSTATE=22011 查看LOCATE函數返回的結果可知,部分記錄中SUBSTR函數的第三個參數為-1,而導致變量超出范圍。 執行SQL:SELECT LOCATE( '#', REMARK) -1 AS LOC FROM A;返回數據如下: ------------------ | LOC | ------------------ | -1 | | -1 | | 2 | ------------------ 所以SUBSTR與LOCATE函數一起使用時,對於要定位的字符不存在時,需要做特殊處理。