Oracle 23c中如何用更简洁方式截断过长字符串并替换为点?
Oracle 23c 字符串简洁处理方案
需求回顾
处理字符串规则:
- 若字符串为NULL或长度≤5,直接返回原串
- 若长度>5,返回前4字符加一个圆点,舍弃其余部分
简洁单步解法
利用Oracle的REGEXP_REPLACE函数,通过正则表达式匹配实现规则,无需CASE表达式:
SELECT str, REGEXP_REPLACE(str, '^(.{4}).+$', '\1.') AS processed_str FROM test;
正则逻辑说明
^(.{4}):捕获字符串开头的4个字符作为分组.+$:匹配4个字符之后的所有后续字符(仅当总长度>5时满足此匹配)- 匹配成功时替换为
\1.(捕获的4字符加圆点),不匹配时直接返回原字符串(包含NULL和长度≤5的情况)
示例验证
先创建测试表并插入数据:
CREATE TABLE test (str VARCHAR2(50)); INSERT INTO test VALUES ('hello!'); INSERT INTO test VALUES ('world'); INSERT INTO test VALUES ('worl.'); INSERT INTO test VALUES ('x'); INSERT INTO test VALUES ('long text'); INSERT INTO test VALUES ('alsotoolong'); INSERT INTO test VALUES (NULL);
执行查询后,预期结果:
| str | processed_str |
|---|---|
| hello! | hell. |
| world | world |
| worl. | worl. |
| x | x |
| long text | long. |
| alsotoolong | also. |
| NULL | NULL |
内容的提问来源于stack exchange,提问作者Jonas Metzler
相关产品推荐
相关产品推荐

