SQLCODE=-138, SQLSTATE=22011解决办法

在将Oracle数据库迁移至DB2的过程中,遇到了SQLCODE=-138, SQLSTATE=22011的错误。问题源于在DB2中,substr函数的起始位置需从1开始,而不能像Oracle那样从0开始。解决方案是调整substr函数的参数,确保第二个参数不小于1。了解不同数据库系统的函数差异对于顺利迁移至关重要。
摘要由CSDN通过智能技术生成

SQLCODE=-138, SQLSTATE=22011解决办法

SQLCODE=-138, SQLSTATE=22011解决办法

今天从Oracle迁移到DB2环境,在验证DB2的时候,遇到了 A numeric argument of a built-in string function is out of range… SQLCODE=-138, SQLSTATE=22011的报错,不禁陷入疑惑,substr居然不能这么用

问题描述

SELECT SUBSTR(表A.字段B,0,2) FROM 表A;

-138 THE SECOND OR THIRD ARGUMENT OF THE SUBSTR OR SUBSTRING FUNCTION IS OUT OF RANGE

问题原因

从IBM官网查询得知,Oracle1和0是一样的效果,但是db2中substr函数是从1开始的,不能从0开始。

substring 函数
fn:substring 函数返回字符串的子串。
语法fn:substring(source-string,start,length)
source-string:要从中检索子串的字符串。
source-string 的数据类型为 xs:string,或者是空序列
start
子串在 source-string 中的起始字符位置。source-string 的第一个位置为 1。如果 start<= 0,那么 start 设置为 1。xFFFF 以后的代码点使用两位 16 位值(又称为代理对)并且在计数时被当成一个字符。
start 的数据类型为 xs:double。
length
子串的长度(以字符计)。length 的缺省值是 source-string 的长度。如果 start+length-1 大于 source-string 的长度,那么 length 设置为 (source-string 的长度)-start+1。xFFFF 以后的代码点使用两位 16 位值(又称为代理对)并且在计算字符串长度时被当成一个字符。
length 的数据类型为 xs:double。
返回的值
如果 source-string 并非空序列,那么返回的值是 source-string 的子串,其起始字符位置为 start,并且包含 length 个字符。如果 source-string 是空序列,那么会生成零长度字符串。
示例
以下函数返回起始于字符串“Test literal”的第 6 个字符的 7 个字符。
fn:substring(‘Test literal’,6,7)
返回的值为“literal”。

又是美好的一天,今天你摸鱼了吗~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今天去哪摸鱼

码字不易,感谢金主

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值