关于存储过程动态截取字符串问题【急急】

woaini11pk 2013-01-14 10:49:33
数据库传过去是这样的格式
101518-销售合同评审流程 [ HTP-20130114-001 ] |101470-销售合同评审流程 [ HTP-20130109-001 ]
我只取前面的ID
101518 这样的
客户有可能传三个这样的 有可能1个 有可能更多

请问存储过程如何截取?
...全文
607 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
陈字文 2013-01-14
  • 打赏
  • 举报
回复
REGEXP_SUBSTR函数格式如下: function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier) __srcstr :需要进行正则处理的字符串 __pattern :进行匹配的正则表达式 __position :起始位置,从第几个字符开始正则表达式匹配(默认为1) __occurrence :标识第几个匹配组,默认为1 __modifier :模式('i'不区分大小写进行检索;'c'区分大小写进行检索。默认为'c'。)
陈字文 2013-01-14
  • 打赏
  • 举报
回复

SELECT REGEXP_SUBSTR('101518-销售合同评审流程 [ HTP-20130114-001 ]','[^-]+',1,1,'i') FROM dual;
结果 101518
woaini11pk 2013-01-14
  • 打赏
  • 举报
回复
不是表与表的关系。 我的意思是 我写的存储过程 传过来101518-销售合同评审流程 [ HTP-20130114-001 ] 这样结构的数据(参数) 我怎么截取前面的ID, 比如:101518-销售合同评审流程 [ HTP-20130114-001 ] 这是一条 |101470-销售合同评审流程 [ HTP-20130109-001 ]这又是一条。是一起传过来的 懂了吗。 不要问我怎么不在服务端就判断好,如果能行 我也不来发帖了
lovezxb0312 2013-01-14
  • 打赏
  • 举报
回复
select distinct substr(目标字段,1,6) from 目标表 你的问题描述不够,你要的最终结果是一张ID的明细表并ID不重复,还要动态管理这张ID表? 如果客户传过来的数据时插入到本数据库的某张表,这个功能可以用触发器来完成 我的想法对的话,跟帖即可!(需要代码的话,说明一下)
陈字文 2013-01-14
  • 打赏
  • 举报
回复
引用 5 楼 woaini11pk 的回复:
我是oracle数据库,请问多条也能也将截取吗?关键是不限定就是我不知道它有多少条数据。10条都有 可能
假如传入的参数为: 101518-销售合同评审流程 [ HTP-20130114-001 ] |101471-销售合同评审流程 [ HTP-20130109-001 ]|101482-销售合同评审流程 [ HTP-20130109-001 ] |101472-销售合同评审流程 [ HTP-20130109-001 ]|101481-销售合同评审流程 [ HTP-20130109-001 ] |101473-销售合同评审流程 [ HTP-20130109-001 ]|101480-销售合同评审流程 [ HTP-20130109-001 ] |101474-销售合同评审流程 [ HTP-20130109-001 ]|101479-销售合同评审流程 [ HTP-20130109-001 ] |101475-销售合同评审流程 [ HTP-20130109-001 ]|101478-销售合同评审流程 [ HTP-20130109-001 ] |101476-销售合同评审流程 [ HTP-20130109-001 ]|101477-销售合同评审流程 [ HTP-20130109-001 ] 相关sql如下:

SELECT REGEXP_SUBSTR(REGEXP_SUBSTR('101518-销售合同评审流程 [ HTP-20130114-001 ] 
|101471-销售合同评审流程 [ HTP-20130109-001 ]|101482-销售合同评审流程 [ HTP-20130109-001 ]
|101472-销售合同评审流程 [ HTP-20130109-001 ]|101481-销售合同评审流程 [ HTP-20130109-001 ]
|101473-销售合同评审流程 [ HTP-20130109-001 ]|101480-销售合同评审流程 [ HTP-20130109-001 ]
|101474-销售合同评审流程 [ HTP-20130109-001 ]|101479-销售合同评审流程 [ HTP-20130109-001 ]
|101475-销售合同评审流程 [ HTP-20130109-001 ]|101478-销售合同评审流程 [ HTP-20130109-001 ]
|101476-销售合同评审流程 [ HTP-20130109-001 ]|101477-销售合同评审流程 [ HTP-20130109-001 ]
','[^|]+',1,LEVEL,'i'),'[^-]+',1,1,'i') AS Num FROM dual CONNECT BY LEVEL<=13;
执行结果如下: 101518 101471 101482 101472 101481 101473 101480 101474 101479 101475 101478 101476 101477
raymonshi 2013-01-14
  • 打赏
  • 举报
回复
这个题的难点,不在于如何截取,而是在如何判断怎么计算,从哪里开始算是一条新记录。 我觉得可以用‘|’来判断是否要进行截取,先判断有多少个记录,然后再计算截取位置。
woaini11pk 2013-01-14
  • 打赏
  • 举报
回复
我是oracle数据库,请问多条也能也将截取吗?关键是不限定就是我不知道它有多少条数据。10条都有 可能

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧