查找最后 2 个特殊字符之间的值
Find Values Between last 2 special Characters
有一个连接多个不同列的引用字段。我正在寻找提取最后一个插入符号和 = 特殊字符之间的值。这些值之间没有固定长度,因此它可以介于 2 个字符和 100
之间
我知道我们可以使用 Substr 和 Instr,但是我正在努力让它按预期工作。
字符串示例:
CONTRACT=30TEE^MCH_CODE=01.01 THIS IS A TEST^
CONTRACT=30TEE^MCH_CODE=01.01 THIS IS A TEST4545^
CONTRACT=30TEE^MCH_CODE=01.01 Testing^
CONTRACT=30TEE^MCH_CODE=01.01 This is an example45^
预期输出:
01.01 THIS IS A TEST
01.01 THIS IS A TEST4545
01.01 Testing
01.01 This is an example45
有很多方法可以做到这一点;这是一个,没有正则表达式:
SQL> with test(x) as
2 (
3 select 'CONTRACT=30TEE^MCH_CODE=01.01 THIS IS A TEST^' from dual union all
4 select 'CONTRACT=30TEE^MCH_CODE=01.01 THIS IS A TEST4545^' from dual union all
5 select 'CONTRACT=30TEE^MCH_CODE=01.01 Testing^' from dual union all
6 select 'CONTRACT=30TEE^MCH_CODE=01.01 This is an example45^' from dual
7 )
8 select trim('^' from reverse(substr(reverse(x), 1, instr(reverse(x), '=') -1))) x2
9 from test;
X2
------------------------------
01.01 THIS IS A TEST
01.01 THIS IS A TEST4545
01.01 Testing
01.01 This is an example45
工作原理:reverse
简单地给出字符串的倒序,这样搜索最后一个 '='
就变成了搜索倒序字符串中的第一个;一旦你知道 last/first '='
的位置,substr
就可以完成工作,你只需要用 trim
.
删除最后一个字符
对于正则表达式(更紧凑但更慢),您可以使用:
regexp_substr(x, '([^=]+)\^$', 1, 1, '', 1)
请注意,这些都是基于这样的假设,即最后一个 '^'
是字符串的最后一个字符。
有一个连接多个不同列的引用字段。我正在寻找提取最后一个插入符号和 = 特殊字符之间的值。这些值之间没有固定长度,因此它可以介于 2 个字符和 100
之间我知道我们可以使用 Substr 和 Instr,但是我正在努力让它按预期工作。
字符串示例:
CONTRACT=30TEE^MCH_CODE=01.01 THIS IS A TEST^
CONTRACT=30TEE^MCH_CODE=01.01 THIS IS A TEST4545^
CONTRACT=30TEE^MCH_CODE=01.01 Testing^
CONTRACT=30TEE^MCH_CODE=01.01 This is an example45^
预期输出:
01.01 THIS IS A TEST
01.01 THIS IS A TEST4545
01.01 Testing
01.01 This is an example45
有很多方法可以做到这一点;这是一个,没有正则表达式:
SQL> with test(x) as
2 (
3 select 'CONTRACT=30TEE^MCH_CODE=01.01 THIS IS A TEST^' from dual union all
4 select 'CONTRACT=30TEE^MCH_CODE=01.01 THIS IS A TEST4545^' from dual union all
5 select 'CONTRACT=30TEE^MCH_CODE=01.01 Testing^' from dual union all
6 select 'CONTRACT=30TEE^MCH_CODE=01.01 This is an example45^' from dual
7 )
8 select trim('^' from reverse(substr(reverse(x), 1, instr(reverse(x), '=') -1))) x2
9 from test;
X2
------------------------------
01.01 THIS IS A TEST
01.01 THIS IS A TEST4545
01.01 Testing
01.01 This is an example45
工作原理:reverse
简单地给出字符串的倒序,这样搜索最后一个 '='
就变成了搜索倒序字符串中的第一个;一旦你知道 last/first '='
的位置,substr
就可以完成工作,你只需要用 trim
.
对于正则表达式(更紧凑但更慢),您可以使用:
regexp_substr(x, '([^=]+)\^$', 1, 1, '', 1)
请注意,这些都是基于这样的假设,即最后一个 '^'
是字符串的最后一个字符。