视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Oracle字符串中数字处理
2020-11-09 12:02:52 责编:小采
文档


输出结果为1234567A0001357 ;发现substr(v_i,14)截取后七位进行计算时,pl/sql会自动把字符转换成整数,把前面的lsquo;0rsqu

最近开始写存储过程,有一个需求,数据库表中有个字段(20位序列号,里面可能有字符,后7位都是数字),,要根据数量对该字段进行加计算

输出结果为1234567A0001357 ;

发现substr(v_i,14)截取后七位进行计算时,pl/sql会自动把字符转换成整数,把前面的‘0’去掉了。

研究Oracle内部函数,发现有个函数可以进行格式转换成字符串 to_char(exp,'reg') exp为要转换的数字等,reg为转换格式

修改v_i := substr(v_i,1,13)||to_char(substr(v_i,14)+i,'0000000');--reg为7个‘0’,如果要保持位数的正确,前面补‘0’

输出结果为:1234567A000 0001357,

发现中间多个空格,不知道什么原因。继续使用oracle 内部函数trim(exp)去掉exp两端空格

修改为:v_i := substr(v_i,1,13)||trim(to_char(substr(v_i,14)+i,'0000000'));

输出结果为:1234567A0000001357,。这是我们想要的

总结,要对oracle内部函数很熟悉啊,不过上面可能有个BUG,如果后七位产生进位,上面处理就不正确了,所有要通过业务来控制字符截取位数。

下载本文
显示全文
专题