You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle中如何从SAP_ID列提取指定中间子串(如ENB)

提取SAP_ID字段中的指定子串

根据你提供的SAP_ID格式(示例:I-JK-SGAR-ENB-H021),目标是提取其中的ENB部分,以下是针对不同数据库环境修改后的查询语句:

MySQL/MariaDB 版本

利用SUBSTRING_INDEX函数分层截取:

select  
  SAP_ID,
  SUBSTRING_INDEX(SUBSTRING_INDEX(SAP_ID, '-', 4), '-', -1) AS EXTRACTED_ENB,
  SITE_TYPE, 
  SITEBACKHAUL, 
  PRIORITY_SITE, 
  RJ_COMPANY_CODE_1,  
  BUSINESSRANKING, 
  USAGE_TYPE, 
  '1' AS STATUS
FROM R4G_OSP.ENODEB
where SAP_ID IS NOT NULL;

逻辑说明:先截取前4个分隔符以内的内容(I-JK-SGAR-ENB),再从该结果中截取最后一个分隔符后的内容,得到ENB。

Oracle 版本

使用正则表达式函数REGEXP_SUBSTR匹配目标子串:

select  
  SAP_ID,
  REGEXP_SUBSTR(SAP_ID, '[^-]+', 1, 4) AS EXTRACTED_ENB,
  SITE_TYPE, 
  SITEBACKHAUL, 
  PRIORITY_SITE, 
  RJ_COMPANY_CODE_1,  
  BUSINESSRANKING, 
  USAGE_TYPE, 
  '1' AS STATUS
FROM R4G_OSP.ENODEB
where SAP_ID IS NOT NULL;

逻辑说明:[^-]+匹配所有非-的连续字符,指定取第4个匹配项,直接得到ENB。

SQL Server 版本

方法1(2016及以上版本,使用STRING_SPLIT)

select  
  e.SAP_ID,
  (select value from STRING_SPLIT(e.SAP_ID, '-') order by (select null) offset 3 rows fetch next 1 row only) AS EXTRACTED_ENB,
  e.SITE_TYPE, 
  e.SITEBACKHAUL, 
  e.PRIORITY_SITE, 
  e.RJ_COMPANY_CODE_1,  
  e.BUSINESSRANKING, 
  e.USAGE_TYPE, 
  '1' AS STATUS
FROM R4G_OSP.ENODEB e
where e.SAP_ID IS NOT NULL;

逻辑说明:拆分字符串后,偏移3行(对应第4个元素)并取1行数据,得到ENB。

方法2(兼容低版本,使用XML转换)

select  
  SAP_ID,
  CAST('<t>' + REPLACE(SAP_ID, '-', '</t><t>') + '</t>' AS XML).value('/t[4]', 'VARCHAR(100)') AS EXTRACTED_ENB,
  SITE_TYPE, 
  SITEBACKHAUL, 
  PRIORITY_SITE, 
  RJ_COMPANY_CODE_1,  
  BUSINESSRANKING, 
  USAGE_TYPE, 
  '1' AS STATUS
FROM R4G_OSP.ENODEB
where SAP_ID IS NOT NULL;

逻辑说明:将字符串转换为XML节点,直接提取第4个节点的内容。

适配可变格式场景

如果SAP_ID的段数不固定,但ENB始终是倒数第二段,可以调整截取逻辑:

  • MySQL/MariaDB:SUBSTRING_INDEX(SUBSTRING_INDEX(SAP_ID, '-', -2), '-', 1)
  • Oracle:REGEXP_SUBSTR(SAP_ID, '[^-]+', 1, REGEXP_COUNT(SAP_ID, '-'))
  • SQL Server:类似思路,先获取总段数再取倒数第二段。

内容的提问来源于stack exchange,提问作者Nadeem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 14:05:29