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
相关产品推荐
相关产品推荐

