【发布时间】:2016-09-09 06:55:45
【问题描述】:
我正在尝试从记录中提取字符串的中间部分。我想得到字符串的唯一中间部分。
select instr('WUK00000105376:WUKE03960761:WUKR0093868603',':')
from dual;
我只想从此字符串中获取WUKE03960761。
我尝试过使用 sustring 和 instring 来获取输出,但没有得到。
【问题讨论】:
我正在尝试从记录中提取字符串的中间部分。我想得到字符串的唯一中间部分。
select instr('WUK00000105376:WUKE03960761:WUKR0093868603',':')
from dual;
我只想从此字符串中获取WUKE03960761。
我尝试过使用 sustring 和 instring 来获取输出,但没有得到。
【问题讨论】:
SELECT SUBSTR(col,
INSTR(col, ':') + 1,
INSTR(col, ':', 1, 2) - INSTR(col, ':') - 1)
FROM dual
【讨论】:
另一种选择是使用regexp_substring() 来获取两个冒号之间的字符串:
select regexp_substr('WUK00000105376:WUKE03960761:WUKR0093868603',':[A-Z0-9]+:')
from dual;
不过,这也会返回冒号,但您也可以告诉 regexp_substr() 从正则表达式返回特定组:
select regexp_substr('WUK00000105376:WUKE03960761:WUKR0093868603',':([A-Z0-9]+):',1,1,'i',1)
from dual;
但是 Tim 使用 substr 和 instr 的解决方案很可能会快很多。
【讨论】: