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

DB2中如何使用正则或REGEXP_SUBSTR提取字符得到结果RdlÖIJIJ

问题原因

你用REGEXP_SUBSTR仅返回单个结果R的原因很简单:REGEXP_SUBSTR默认仅返回第一个匹配到的子串,你的正则每次匹配单个字符,自然只会拿到第一个匹配的首字母R,无法直接拼接所有符合规则的字符,单独使用REGEXP_SUBSTR达不到需求。


解决方案

方案1:用REGEXP_REPLACE反向替换(兼容所有支持正则函数的DB2版本)

逻辑最简单,原来你是删除符合规则的字符得到剩余内容,现在反过来:把所有不符合规则的字符删除,只保留你需要的部分即可,写法如下:

SELECT REGEXP_REPLACE(
  'René de la Ömer-Arie IJsbrand IJsse',
  '((?<=^)[A-Z]|[IJ]|(?<= ).)|.',
  '\1',
  1,
  0
) AS result FROM "SYSIBM".SYSDUMMY1

执行后即可直接得到RdlÖIJIJ的预期结果。

方案2:REGEXP_EXTRACT_ALL + LISTAGG(适用于DB2 11.5及以上版本)

如果你的DB2版本支持REGEXP_EXTRACT_ALL函数,可以先提取所有符合规则的字符,再拼接成字符串:

SELECT LISTAGG(elem, '') AS result
FROM TABLE(
  REGEXP_EXTRACT_ALL(
    'René de la Ömer-Arie IJsbrand IJsse',
    '(^[A-Z])|([IJ])|(?<= ).'
  )
) AS t(elem)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:54:02