如何从字符串中获取特定值?

时间:2017-05-11 11:33:18

标签: sql oracle

我有一个像

这样的字符串值的列
"BY *MAN MOBILE*0112305V7 - JAIPUR "

我需要在*和 - 之间编写代码 示例0112305V7。有人可以帮我解决这个问题

3 个答案:

答案 0 :(得分:1)

也许像regexp这样的东西:

select regexp_substr('BY *MAN MOBILE*0112305V7 - JAIPUR ','[[:digit:]]{3,}[[:alnum:]]{3,}') from dual;

答案 1 :(得分:0)

尝试此操作(将str替换为您的列名称):

SELECT SUBSTR(str, INSTR(str, '*', 2) + 1, INSTR(str, '-') - INSTR(str, '*', 2) - 1)

注意:这仅适用于您的字符串包含__*__*XXXX-____

的情况

答案 2 :(得分:0)

假设在'*'次出现后,您的字符串始终有两个' - '和一个'*',以获取第二个'*'和{{1}之间的值},你可以使用:

' - '

这给出了一个非常自我解释的结果:

select substr(str, instr(str, '*', 1, 2)+1, instr(str, ' - ') - instr(str, '*', 1, 2) -1) as theNeededString,
       instr(str, '*', 1, 2) as theSecondStar,
       instr(str, ' - ') - instr(str, '*', 1, 2)-1 as lengthOfTheNeededString
from ( select 'BY *MAN MOBILE*0112305V7 - JAIPUR ' str from dual)