查询:
Select searchtext from xyz.
结果
searchtext
-------------------------------------------------------------------------------
serviceID 100615188 accessID 100615187 accessPathSpeed 5Mbps handoverID 100556732 accessSpeed 5Mbps
在此,我希望serviceID作为列名,并将100615188作为值。 像
ServiceID
-----------
100556732
答案 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
()
- 建立一个捕获组\d+
- 匹配1位或更多位数并在替换部分
\1
- 使用反向引用替换第一个捕获的组。如果serviceId始终是字符串中的第一个整数部分,那么您也可以使用regexp_substr
:
select
regexp_substr(col,'\d+') serviceId
from your_table;