数据格式如下:ac~defg~123gf~g~
abc~~123~ldfg~yyyy~
~~abc~33~~def~ccc~做分隔符
我现在要删除值是不知道的, 只知道这个值的位置比如ac~defg~123gf~g~ 看做一个数组的方式, ac代表0,defg代表1,依次向后推。 好比我现在好删除2这个位置的值。 就是删除123gf。 数据量可能在几万条的样子。
那位高手有没有办法?
abc~~123~ldfg~yyyy~
~~abc~33~~def~ccc~做分隔符
我现在要删除值是不知道的, 只知道这个值的位置比如ac~defg~123gf~g~ 看做一个数组的方式, ac代表0,defg代表1,依次向后推。 好比我现在好删除2这个位置的值。 就是删除123gf。 数据量可能在几万条的样子。
那位高手有没有办法?
g~',instr('ac~defg~123gf~g~','~',1,3)) from dual;SUBSTR('AC~DEFG~123G
--------------------
ac~defg~g~
SQL> SELECT RTRIM(REGEXP_SUBSTR('ac~~defg~~~123gf~g~','.*?'||'(~){1,}',1,3),'~') STR FROM DUAL;STR
-----
123gf
SQL> SELECT LTRIM(SUBSTR('ac~~defg~~~123gf~g~',
2 REGEXP_INSTR('ac~~defg~~~123gf~g~', '(~){1,}', 1, 2),
3 REGEXP_INSTR('ac~~defg~~~123gf~g~', '(~){1,}', 1, 3) -
4 REGEXP_INSTR('ac~~defg~~~123gf~g~', '(~){1,}', 1, 2)),
5 '~') STR
6 FROM DUAL;STR
-----
123gf
SQL> SELECT SUBSTR(REGEXP_REPLACE('ac~~defg~~~123gf~g~', '(~){1,}', '~'),
2 INSTR(REGEXP_REPLACE('ac~~defg~~~123gf~g~', '(~){1,}', '~'),
3 '~',
4 1,
5 2) + 1,
6 INSTR(REGEXP_REPLACE('ac~~defg~~~123gf~g~', '(~){1,}', '~'),
7 '~',
8 1,
9 3) -
10 INSTR(REGEXP_REPLACE('ac~~defg~~~123gf~g~', '(~){1,}', '~'),
11 '~',
12 1,
13 2) - 1) STR
14 FROM DUAL;STR
-----
123gf
不使用SQL,本来就是写的存储过程。各位帮忙写个完整的。 谢谢了