如何在DB2数据库中使用正则函数提取字符串大写字母且忽略空格
DB2 提取字段中所有大写字母的实现方案
针对从Name字段提取所有大写字母、忽略其他字符的需求提供两种可行实现:
方案1:使用REGEXP_REPLACE实现(推荐)
直接替换所有非大写英文字母的字符为空,逻辑简单性能最优:
SELECT REGEXP_REPLACE(Name, '[^A-Z]', '') AS uppercase_abbr FROM your_table;
测试效果:输入值为Leonardo Di Caprio时,返回结果为LDC,完全符合预期。
方案2:使用REGEXP_SUBSTR实现(适配原计划使用该函数的场景)
如果必须使用REGEXP_SUBSTR函数,可通过递归CTE逐位提取所有大写字母后拼接:
WITH cte (name, pos, result) AS ( SELECT Name, 1, CAST('' AS VARCHAR(100)) FROM your_table UNION ALL SELECT name, pos + 1, result || REGEXP_SUBSTR(name, '[A-Z]', 1, pos) FROM cte WHERE REGEXP_SUBSTR(name, '[A-Z]', 1, pos) IS NOT NULL ) SELECT DISTINCT result AS uppercase_abbr FROM cte WHERE pos = (SELECT MAX(pos) FROM cte c WHERE c.name = cte.name);
以上方案适用于DB2 9.7及更高版本,正则匹配默认区分大小写,无需额外参数配置。
内容的提问来源于stack exchange,提问作者amazereijn
相关产品推荐
相关产品推荐

