Oracle SQL Developer中不使用INITCAP实现指定驼峰格式转换
Oracle 非INITCAP实现自定义驼峰格式转换方案
转换规则
- 仅字符串首位、空格后的第一个字符转为大写
- 其余所有位置的字符统一转为小写,撇号后的字符不触发大写逻辑
- 同时兼容带撇号、不带撇号的全大写字符串输入场景
验证标准
两个测试用例需全部通过:
- 输入值
RAKE'SH RE'DD'Y,预期输出Rake'sh Re'dd'y,原生INITCAP返回的Rake'Sh Re'Dd'Y不符合要求- 输入值
RAKESH REDDY,预期输出Rakesh Reddy,和原生INITCAP返回结果一致
实现SQL
实现逻辑逐字符遍历判断,仅当字符位于串首、或前序字符为空格时转大写,其余字符统一转小写,从根源上避免撇号触发大写的问题,Oracle 11g及以上版本可直接运行:
WITH char_process AS ( SELECT source_str, LEVEL AS pos, CASE WHEN LEVEL = 1 OR SUBSTR(source_str, LEVEL - 1, 1) = ' ' THEN UPPER(SUBSTR(source_str, LEVEL, 1)) ELSE LOWER(SUBSTR(source_str, LEVEL, 1)) END AS target_char FROM ( -- 此处可替换为业务表查询,source_str对应需要转换的字段 SELECT 'RAKE''SH RE''DD''Y' AS source_str FROM dual ) CONNECT BY LEVEL <= LENGTH(source_str) ) SELECT LISTAGG(target_char, '') WITHIN GROUP (ORDER BY pos) AS convert_result FROM char_process;
适配说明
- 对接业务表时,将内层子查询的dual表替换为业务表,
source_str替换为实际存储待转换内容的字段即可 - 如果源数据存在连续多个空格的情况,可提前用正则做预处理,将
source_str替换为REGEXP_REPLACE(你的字段名, '\s+', ' ')即可避免多空格导致的异常大写
内容的提问来源于stack exchange,提问作者dinesh venkat vasamsetti
相关产品推荐
相关产品推荐

