[求助]oracle里面该怎么截取字段 oracle 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 试试regexp_instr或regexp_replacehttp://docs.oracle.com/cd/B19306_01/server.102/b14200/functions129.htm#SQLRF06300http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions130.htm#i1305521 --试试这个土方法SQL> select replace('[d2846209[p149092917[d3589076]][p149092918[d3589077]]]', 2 substr('[d2846209[p149092917[d3589076]][p149092918[d3589077]]]', 3 instr('[d2846209[p149092917[d3589076]][p149092918[d3589077]]]', 4 'p149092917') - 1, 5 22), 6 '') 7 from dual;REPLACE('[D2846209[P149092917[D3--------------------------------[d2846209[p149092918[d3589077]]] 方法不错,唯一缺点就是不知道这个22怎么得到,可能字符长度不是22,能不能通过语句判断得到呢?寻找你指定字符后面的 ] 的位置select instr(substr('[d2846209[p149092917[d3589076]][p149092918[d3589077]]]', instr('[d2846209[p149092917[d3589076]][p149092918[d3589077]]]', 'p149092917') - 1),']')+1 from dual把这个拼到语句里就OK了,拼完貌似很长 方法不错,唯一缺点就是不知道这个22怎么得到,可能字符长度不是22,能不能通过语句判断得到呢?寻找你指定字符后面的 ] 的位置select instr(substr('[d2846209[p149092917[d3589076]][p149092918[d3589077]]]', instr('[d2846209[p149092917[d3589076]][p149092918[d3589077]]]', 'p149092917') - 1),']')+1 from dual把这个拼到语句里就OK了,拼完貌似很长不错,至少是实现了 这个不知道用哪个能实现?regexp_replace应该可以,写一个正则表达式就完事了,代码可以少很多就是正则表达式不好写 试一下select regexp_replace('[d2846209[p149092917[d3589076]][p149092918[d3589077]]]','[[]p149092917[[][0-9a-zA-Z]+[]]','') strfrom dual 上面的结果比你要的结果多一个],修正下select regexp_replace('[d2846209[p149092917[d3589076]][p149092918[d3589077]]]','[[]p149092917[[][0-9a-zA-Z]+[]]+','') strfrom dual 再补一个select regexp_replace('[d2846209[p149092917[d3589076]][p149092918[d3589077]]]','\[p149092917\[[[:alnum:]]{8}\]\]','') from dual; 效果非常好,但就是有一些小问题,比如这种:已知字段:[d2846914[p371728823[d4564258]][p371728819[d16405230]][p371728823[d4564258]][p371728823[d4564258]]]截取字段:p371728823结果:[d2846914[p371728819[d16405230]]]但是根据你sql的结果是[d2846914[p371728819[d16405230]],最后面少了一个‘]’但是根据你的sql,截出的结果是: 改为这样就可以了,select regexp_replace('[d2846209[p149092917[d3589076]][p149092918[d3589077]]]','[[]p149092917[[][0-9a-zA-Z]+[]]{2}','') strfrom dual'{m,n}' 一个精确地出现次数范围,m=<出现次数<=n,'{m}'表示出现m次,'{m,}'表示至少出现m次。 oracle正则表达式 在oracle的触发器里,怎么判断修改了某个表的某个字段为1的情况 hash分区不平均问题,急等!!! Oracle10g数据库应用部署的问题 用SEQUENCE生成自动序列的时候怎样生成这样的00001 不知道有没有这样的语句。 怎么样做到两个相同的oracle数据库中数据一致呢? oracle8.16在win2000上安装成功,但在xp上安装不行,怎么回事? 关于oracle的安装时指定的port的查询 oracle怎么这么笨啦???——关于ref cursor 动态复制分区表--请大神指点迷津 exists的用法,新人求助 Oracle创建数据库时出错求大神指教!!
http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions129.htm#SQLRF06300
http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions130.htm#i1305521
SQL> select replace('[d2846209[p149092917[d3589076]][p149092918[d3589077]]]',
2 substr('[d2846209[p149092917[d3589076]][p149092918[d3589077]]]',
3 instr('[d2846209[p149092917[d3589076]][p149092918[d3589077]]]',
4 'p149092917') - 1,
5 22),
6 '')
7 from dual;REPLACE('[D2846209[P149092917[D3
--------------------------------
[d2846209[p149092918[d3589077]]]
寻找你指定字符后面的 ] 的位置
select instr(substr('[d2846209[p149092917[d3589076]][p149092918[d3589077]]]',
instr('[d2846209[p149092917[d3589076]][p149092918[d3589077]]]',
'p149092917') - 1),']')+1 from dual
把这个拼到语句里就OK了,拼完貌似很长
寻找你指定字符后面的 ] 的位置
select instr(substr('[d2846209[p149092917[d3589076]][p149092918[d3589077]]]',
instr('[d2846209[p149092917[d3589076]][p149092918[d3589077]]]',
'p149092917') - 1),']')+1 from dual
把这个拼到语句里就OK了,拼完貌似很长
不错,至少是实现了
regexp_replace应该可以,写一个正则表达式就完事了,代码可以少很多
就是正则表达式不好写
select regexp_replace('[d2846209[p149092917[d3589076]][p149092918[d3589077]]]',
'[[]p149092917[[][0-9a-zA-Z]+[]]','') str
from dual
select regexp_replace('[d2846209[p149092917[d3589076]][p149092918[d3589077]]]',
'[[]p149092917[[][0-9a-zA-Z]+[]]+','') str
from dual
已知字段:[d2846914[p371728823[d4564258]][p371728819[d16405230]][p371728823[d4564258]][p371728823[d4564258]]]
截取字段:p371728823
结果:[d2846914[p371728819[d16405230]]]
但是根据你sql的结果是[d2846914[p371728819[d16405230]],最后面少了一个‘]’
但是根据你的sql,截出的结果是:
select regexp_replace('[d2846209[p149092917[d3589076]][p149092918[d3589077]]]',
'[[]p149092917[[][0-9a-zA-Z]+[]]{2}','') str
from dual'{m,n}' 一个精确地出现次数范围,m=<出现次数<=n,'{m}'表示出现m次,'{m,}'表示至少出现m次。