Oracle SQL中指定首字母缩略词的大写转换实现方法问询
Oracle SQL 实现指定缩略词大写转换
要实现只将字符串中的cnv、fha、rhs、va(不区分大小写)转换为大写,同时保留其他文本不变,你可以利用REGEXP_REPLACE结合反向引用和UPPER函数直接实现,无需复杂的PL/SQL函数组合。
基础实现(替换所有匹配项)
SELECT REGEXP_REPLACE('Bank of Nowhere - fha', '(cnv|fha|rhs|va)', UPPER('\1'), 1, 0, 'i') AS converted_text FROM dual;
参数说明
'(cnv|fha|rhs|va)':用括号将目标缩略词分组,\1代表匹配到的具体缩略词UPPER('\1'):将匹配到的缩略词动态转换为对应大写形式1:从字符串第1个字符开始匹配0:替换所有匹配到的缩略词(如果只需要替换第一个匹配项,改为1即可)'i':开启不区分大小写匹配,确保fHa、cNv这类混合大小写的缩略词也能被识别转换
测试示例
- 输入:
'Bank of Nowhere - cnv'→ 输出:'Bank of Nowhere - CNV' - 输入:
'Bank of rhs Nowhere - va'→ 输出:'Bank of RHS Nowhere - VA' - 输入:
'fHa cNv Va test'→ 输出:'FHA CNV VA test'
进阶:避免替换单词内的缩略词
如果需要确保只替换独立的缩略词(比如不替换cnvbank里的cnv),可以给正则添加边界匹配,确保缩略词前后是非字母字符或字符串首尾:
SELECT REGEXP_REPLACE('cnvbank test - fha', '([^a-zA-Z]|^)(cnv|fha|rhs|va)([^a-zA-Z]|$)', '\1' || UPPER('\2') || '\3', 1, 0, 'i') AS converted_text FROM dual;
这个语句会跳过cnvbank中的cnv,只转换独立的fha为FHA。
内容的提问来源于stack exchange,提问作者skippen
相关产品推荐
相关产品推荐

