Oracle数据库中如何提取两个&之间的指定目标字符串
Oracle 字符串提取实现方案
针对给定的&分隔字符串,我们可以结合REGEXP_SUBSTR做分隔提取,再用TRIM处理冗余的空格和&符号,精准提取目标内容。
具体实现代码
单输入字符串场景
如果目标内容是一个完整的拼接字符串,用以下SQL直接提取:
WITH input_data AS ( SELECT 'O&103122&00:00:00&& , &SECS&1&19.0000&&& , & &10/01/2022 - 10/31/2022&TSIMM:TRUNK SIGNALING - ON NET Charge&&gid=2060155&&10/01/2022 - 10/31/2022&TSIMM:TRUNK SIGNALING - ON NET Charge&&gid=2060155&' AS input_str ) SELECT TRIM(BOTH ' &' FROM REGEXP_SUBSTR(input_str, '[^&]+', 1, 6)) AS extracted_secs, TRIM(BOTH ' &' FROM REGEXP_SUBSTR(input_str, '[^&]+', 1, 15)) AS extracted_tsimm1, TRIM(BOTH ' &' FROM REGEXP_SUBSTR(input_str, '[^&]+', 1, 22)) AS extracted_tsimm2 FROM input_data;
多字段存储场景
如果原始内容拆分存储在两个字段(比如col1和col2)中,拆分处理如下:
SELECT -- 从第一段字段提取SECS TRIM(BOTH ' &' FROM REGEXP_SUBSTR(col1, '[^&]+', 1, 6)) AS extracted_secs, -- 从第二段字段提取第一个TSIMM内容 TRIM(BOTH ' &' FROM REGEXP_SUBSTR(col2, '[^&]+', 1, 2)) AS extracted_tsimm1, -- 从第二段字段提取第二个TSIMM内容 TRIM(BOTH ' &' FROM REGEXP_SUBSTR(col2, '[^&]+', 1, 7)) AS extracted_tsimm2 FROM your_table;
关键逻辑说明
- REGEXP_SUBSTR 分隔提取:
REGEXP_SUBSTR(源字符串, '[^&]+', 1, 位置n):以&为分隔符,提取第n个非空元素([^&]+匹配任意不含&的字符序列)。需根据实际字符串的分隔结构调整位置参数。
- TRIM 清理冗余字符:
TRIM(BOTH ' &' FROM 提取结果):同时去除字符串前后的空格和&符号,完全匹配需求中的清理规则。如果只需清理单侧冗余,可替换BOTH为LEADING(前缀)或TRAILING(后缀)。
内容的提问来源于stack exchange,提问作者Ashok
相关产品推荐
相关产品推荐

