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

Oracle中提取@分隔字符串指定位置值(含空值处理)

Oracle中提取@分隔字符串指定位置值(空段视为NULL)

在Oracle中,要提取以@分隔的字符串指定位置的值,且将连续@@之间的空内容视为NULL,可以结合REGEXP_SUBSTR和NULLIF函数实现。REGEXP_SUBSTR的特定正则模式能精准捕获每个分隔段(包括空段),再通过NULLIF将空字符串转换为NULL。

核心实现逻辑

使用正则表达式'(.*?)(@|$)'匹配每个@分隔的片段:

  • .*?:非贪婪匹配任意字符(包括空内容)
  • (@|$):匹配分隔符@或字符串结尾
    通过REGEXP_SUBSTR的参数指定提取第N个片段,再用NULLIF(提取结果, '')将空字符串转为NULL。

示例SQL语句

假设待处理字符串存储在表test_table的target_str字段中,提取第3、4、5、7位值的SQL如下:

SELECT
  NULLIF(REGEXP_SUBSTR(target_str, '(.*?)(@|$)', 1, 3, NULL, 1), '') AS pos3,
  NULLIF(REGEXP_SUBSTR(target_str, '(.*?)(@|$)', 1, 4, NULL, 1), '') AS pos4,
  NULLIF(REGEXP_SUBSTR(target_str, '(.*?)(@|$)', 1, 5, NULL, 1), '') AS pos5,
  NULLIF(REGEXP_SUBSTR(target_str, '(.*?)(@|$)', 1, 7, NULL, 1), '') AS pos7
FROM test_table;

验证示例结果

示例1

输入字符串:N@@N@14/12/2023@WAN HAI 325@@05/01/2024@19/01/2024@29/12/2023@@@@
执行SQL后输出:

  • pos3: 14/12/2023
  • pos4: WAN HAI 325
  • pos5: NULL
  • pos7: 19/01/2024

示例2

输入字符串:N@@N@06/10/23@@2310206@17/11/23@30/11/2023@11/10/23@@@@@@@@
执行SQL后输出:

  • pos3: 06/10/23
  • pos4: NULL
  • pos5: 2310206
  • pos7: 30/11/2023

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 21:36:02