扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
本文个人拙见,若有出入,请指出——来自菜的颤抖
创新互联公司专注于沂水企业网站建设,成都响应式网站建设,成都商城网站开发。沂水网站建设公司,为沂水等地区提供建站服务。全流程按需网站策划,专业设计,全程项目跟踪,创新互联公司专业和态度为您提供的服务
该方式的效率不高,如何优化,请看 记Oracle中regexp_substr函数的一次调优(速度提高99.5%)
表A中存放了集装箱的信息,一个集装箱一条记录,表B中存放了对于集装箱操作的指令,一条指令包括多个集装箱箱号,通过分号 ; 切割( TCIU2347687;XUTR3546865 ),现在的需求是,对于已经在指令表B中的集装箱,在查询表A时需要过滤掉。
所以必须将分号分割的记录,拆分成单独的记录。
变成:
Oracle可使用 regexp_substr函数 实现,实现上面切割的sql为:
其中 regexp_substr 各个参数的含义:
结果就是 aaa , 如果把第二个1变成2,输出就是 bbb 。
好了,这部分意图很明显了,下面就是把它每一个切割串取出来,看到上面取 level个 ,而这个 level 是个什么东西呢,在这个之前,先看 regexp_count(string, c) 函数,这个函数其实很好理解,返回string中c的个数。
然后就是这个level,这是一个伪列,和RowNum相似,
所以再回到最初的sql,也就很好理解了。
SELECT REGEXP_SUBSTR(t.PATH_IDS||',', '[^,]+', 1, 1),
REGEXP_SUBSTR(t.PATH_IDS||',', '[^,]+', 1, 2),
REGEXP_SUBSTR(t.PATH_IDS||',', '[^,]+', 1, 3),
DECODE(REGEXP_SUBSTR(t.PATH_IDS||',', '[^,]+', 1, 5), NULL, NULL, REGEXP_SUBSTR(t.PATH_IDS||',', '[^,]+', 1, 4)),
DECODE(REGEXP_SUBSTR(t.PATH_IDS||',', '[^,]+', 1, 5), NULL, REGEXP_SUBSTR(t.PATH_IDS||',', '[^,]+', 1, 4), REGEXP_SUBSTR(t.PATH_IDS||',', '[^,]+', 1, 5))
FROM 机构层级关系表 t
前三列根据正则匹配,获取对应的分割后的值,没有啥讲的,
第四列要判断是否存在第五列,如果不存在,则第四列要空,存在则用第四列的值
第五列要判断是否存在第五列,如果不存在,则给第四列的值,存在则用第五列的值
直接使用拼接的方法来解决此问题。
如下参考:
1.新的PHP文件,如下所示。
2.声明数组变量,如下图所示。
3.使用内爆函数将数组连接到具有连接字符-的字符串中。
4.输出连接后的字符串,如下图所示。
5.预览效果如图所示。
6.用implode函数使数组拼接成字符串,连接符为?完成如下。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流