查找字符串中键的值

时间:2017-02-01 10:32:14

标签: oracle parsing stored-procedures plsql

查询:

Select searchtext from xyz.

结果

searchtext
-------------------------------------------------------------------------------
serviceID 100615188 accessID 100615187 accessPathSpeed 5Mbps handoverID 100556732 accessSpeed 5Mbps

在此,我希望serviceID作为列名,并将100615188作为值。 像

ServiceID
-----------
100556732

1 个答案:

答案 0 :(得分:1)

您可以使用正则表达式来解决此问题:

select regexp_replace(col,'.*serviceID\s+(\d+).*','\1') from your_table;

演示:

Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - Production
SQL> with your_table(col) as (
  2    select 'serviceID 100615188 accessID 100615187 accessPathSpeed 5Mbps handoverID 100556732 accessSpeed 5Mbps' from dual
  3  )
  4  select
  5    regexp_replace(col,'.*serviceID\s+(\d+).*','\1') serviceId
  6  from your_table;

SERVICEID
---------
100615188

SQL>

详细说明:

'.*serviceID\s+(\d+).*'
  • .* - 在serviceID
  • 之前匹配零个或多个字符
  • serviceID - 按字面意思匹配
  • \s+ - 在serviceID
  • 之后匹配1个或多个空格字符
  • () - 建立一个捕获组
  • \d+ - 匹配1位或更多位数

并在替换部分

  • \1 - 使用反向引用替换第一个捕获的组。

如果serviceId始终是字符串中的第一个整数部分,那么您也可以使用regexp_substr

select
  regexp_substr(col,'\d+') serviceId
from your_table;