ORACLE 数据库使用正则表达式重新计算指定位置的数字为新的数字
昨天工作中遇到这个问题:
有一个这样的字符串expression变量,里面可能存储的值类似于以下
[Index_CivilWork,0]*(1+[Y10814,1])/[Y10674,1]
[300,1]/[PROCOST,$0]
给定另外一个整数常量 step
现在想用正则表达式,把expression中的,所有紧接着逗号之后的数字加上step,例如
如果step等于1 那么第一个应该得出[Index_CivilWork,1]*(1+[Y10814,2])/[Y10674,2],第二个应该得出
[300,2]/[PROCOST,$0]
我的解决方法:
create or replace function f_get_nebformula(expression in varchar2, step in pls_integer)
return varchar2 is
i_l_commas pls_integer; --表达式中的逗号个数
i_l_dollars pls_integer; --表达式中的货币符号个数
str_result varchar2(2000);
i_l_strpos pls_integer;
i_l_endpos pls_integer;
i_l_laststrpos pls_integer;
i_l_lastendpos pls_integer;
i_l_number pls_integer;
begin
i_l_commas := length(regexp_replace(REPLACE(expression, ',', '@'), '[^@]+',''));
i_l_dollars := (length(expression)-length(replace(expression,'$','')))/length('$');
str_result := '';
--解析表达式
for i in 1 .. i_l_commas-i_l_dollars loop
i_l_strpos := regexp_instr(expression, ',[[:digit:]]', 1, i)+1; --第i个数字起始下标的位置
i_l_endpos := i_l_strpos + length(regexp_substr(expression, ',[[:digit:]]+', 1, i))-2; --第i个数字结束下标
i_l_number := substr(expression, i_l_strpos, i_l_endpos-i_l_strpos+1)+ step;
if i = 1 then
i_l_laststrpos := 0;
i_l_lastendpos := 0;
else
i_l_laststrpos := regexp_instr(expression, ',[[:digit:]]', 1, i-1)+1; --查找前一次模式的数字起始下标
i_l_lastendpos := i_l_laststrpos + length(regexp_substr(expression, ',[[:digit:]]+', 1, i-1))-2; --查找前一次模式的数字结束下标
end if;
--组装字符串
str_result := str_result || substr(expression, i_l_lastendpos+1, i_l_strpos-i_l_lastendpos-1)||i_l_number;
end loop;
--组装最后一段字符串
str_result := str_result || substr(expression, i_l_endpos+1, length(expression));
return(str_result);
end f_get_nebformula;
ORACLE 数据库使用正则表达式重新计算指定位置的数字为新的数字的更多相关文章
- --关于null在oracle数据库中是否参与计算,进行验证,
--关于null在oracle数据库中是否参与计算,进行验证,with td as (select null id,1 name from dual ),td1 as ( select null id ...
- oracle数据库表中,插入数据的时候如何产生一个 字母+数字 编号?
Oracle 语句中“||”代表什么啊? oracle数据库表中,插入数据的时候如何产生一个 字母+数字 编号? 排序的话,用order by来处理即可.比如:cola123a234b999b335s ...
- Oracle数据库ORA-12154: TNS: 无法解析指定的连接标识符详解
ORA-12154: TNS: 无法解析指定的连接标识符(转自http://www.cnblogs.com/psforever/p/3929064.html) 相信使用过Oracle数据库的人一定碰到 ...
- oracle 数据库,能不能将查询的结果创建成新表。
这个是可以的.sql:create table tablename1 as select t2. * from tablename2 t2 where t2.filename =‘张三’. 解释:就是 ...
- oracle数据库执行脚本常用命令总结
1. 执行一个SQL脚本文件 代码如下 复制代码 sqlplus user/pass@servicename<file_name.sql或SQL>start file_names或SQL& ...
- 关于Oracle数据库故障诊断基础架构
本节包含有关Oracle数据库故障诊断基础结构的背景信息.它包含以下主题: 故障诊断基础架构概述 关于事件和问题 故障诊断基础设施组件 自动诊断信息库的结构,内容和位置 故障诊断基础架构概述 故障诊断 ...
- Oracle数据库基本常用命令汇总
1.得到数据库名和创建日期SELECT name, created, log_mode, open_mode FROM v$database; 2.ORACLE数据库的计算机的主机名,ORACLE数据 ...
- 用Excel导入Oracle数据库plsql
打开plsql之后,在工具栏点击[tools]--[ODBC Imoprter] 选择导入文件的类型,这里是excel文件,所以选择Excel Files 输入连接数据库的用户名和密码 点击Conne ...
- ORACLE数据库登录显示ORA-28001: the password has expired
Oracle数据库登录显示 "这个密码已过期,请输入新密码" 点击win键 找到Oracle的SQL Plus 点击打开之后输入登录的用户名密码,然后会显示该密码已过期,输入新口令 ...
随机推荐
- FreeCAD_DWG文件格式支持
FreeCAD 是一款开源的三维模型制作软件,体积小.功能强大,可结合软件包划分网格进行有限元分析,上手速度极快.但也存在问题,即软件自身不支持DWG文件格式.本文介绍 FreeCAD 支持 DWG格 ...
- nginx 配置本地https(免费证书)
Linux系统下生成证书 生成秘钥key,运行: $ openssl genrsa -des3 -out server.key 20481会有两次要求输入密码,输入同一个即可 输入密码 然后你就获得了 ...
- 剑指Offer 66. 机器人的运动范围 (回溯)
题目描述 地上有一个m行和n列的方格.一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子. 例如,当k为18时,机器人能 ...
- [转]https://www.jianshu.com/p/06443248f4d8
eos是什么? 原文 https://www.jianshu.com/p/06443248f4d8 简介 用一句话来定义eos,即:区块链操作系统,支持在它之上构建dapp,支持智能合约.帐户.身份验 ...
- 小程序之--canvasToTempFilePath
最近做的小程序需要图片上传头像的功能,不对上传的图片做处理肯定出来的效果不好:所以就隐藏了一个canvas对上传的图片进行压缩或者进行大小的编辑: 通过chooseImage方法,可以拿到图片的临时路 ...
- Watchman 的安装
先查看gcc的版本 gcc --version 如果gcc的版本低于4.8,就要升级gcc的版本了.在这里,就不延时升级gcc了, 安装watchman git clone https://githu ...
- python利用requests和threading模块,实现多线程爬取电影天堂最新电影信息。
利用爬到的数据,基于Django搭建的一个最新电影信息网站: n1celll.xyz (用的花生壳动态域名解析,服务器在自己的电脑上,纯属自娱自乐哈.) 今天想利用所学知识来爬取电影天堂所有最新电影 ...
- scroll-view
scroll-view 中分别有上下竖向滑动和左右横向滑动之分,在这次项目中刚好需要用到横向滑动,但在测试过程中发现横向滑动没有了效果(静止在那里没移动过),经调试发现: 1.scroll-view ...
- 关于layui中tablle 渲染数据后 sort排序问题
最近在使用easyweb框架做后台管理,案例可见https://gitee.com/whvse/EasyWeb. 其中遇到了 sort排序问题, html代码:<table class=&quo ...
- python 启动时报错无法正常启动(0xc000007b)请单击“确定”关闭应用程序的解决办法
这是一个自己非常傻逼的问题,但是还是想记录下来 晚上安装python,不管是命令提示符中运行还是python直接打开,都提示报错 各种百度,各种查找排除以后,皆不能解决错误 最后发现:特么64位系统下 ...