PLSQL:获取给定机器生成的字符串中第3号和第4号之间的字

时间:2019-02-25 06:56:28

标签: oracle plsql

我给了看起来像这样的字符串: 给定字符串:#152#005#001#00000000000000000000#0# #  我想提取第3个和第4个“#”之间的数字,在这种情况下为001。

所需的输出:001

2 个答案:

答案 0 :(得分:1)

这里的一个选项是对捕获组使用REGEXP_SUBSTR

SELECT regexp_replace(your_string, '^#([^#]+#){2}([^#]+).*$', '\2') AS output
FROM your_table;

Demo

以下是^#([^#]+#){2}([^#]+).*$使用的正则表达式模式的说明:

^             from the start of the string
#             match an initial #
([^#]+#){2}   followed by two paths (consume 152#005#)
([^#]+)       then match and consume the third term (001)
.*            consume the rest of the string
$             until the end

答案 1 :(得分:0)

这两个选项怎么样:

  • result_1使用正则表达式的子字符串(取第三个单词
  • result_2使用传统的SUBSTR + INSTR组合

SQL> with test (col) as
  2    (select '#152#005#001#00000000000000000000#0#   #' from dual)
  3  select regexp_substr(col, '\w+', 1, 3) result_1,
  4         --
  5         substr(col, instr(col, '#', 1, 3) + 1,
  6                     instr(col, '#', 1, 4) - instr(col, '#', 1, 3) - 1) result_2
  7  from test;

RES RES
--- ---
001 001

SQL>