Oracle PL/SQL正则表达式:去除姓氏后缀需求实现
Oracle PL/SQL 正则表达式移除姓氏指定后缀
需求说明
编写Oracle PL/SQL正则表达式,移除姓氏末尾的指定后缀,后缀列表(含中英文对应):
- JR(小)
- SR(老)
- I(一世)
- II(二世)
- III(三世)
- IV(四世)
- V(五世)
处理规则:
- 后缀前允许存在任意非字母分隔符(空格、逗号、斜杠等)
- 后缀可带可选的点号(如
JR.) - 若末尾字符不在后缀列表中,则保留(如示例中的
S)
核心实现
使用Oracle内置的REGEXP_REPLACE函数,通过正则匹配并替换目标后缀:
REGEXP_REPLACE( input_column, -- 输入的姓氏字符串列或变量 '\s*[,\s/]*\b(JR|SR|I{1,3}|IV|V)\b\.?\s*$', '', 1, 0, 'i' )
正则表达式详解
\s*:匹配后缀前的零个或多个空白字符[,\s/]*:匹配零个或多个分隔符(支持逗号、空格、斜杠,可按需扩展)\b:单词边界,确保匹配完整后缀,避免误匹配长单词中的子串(JR|SR|I{1,3}|IV|V):匹配所有预定义后缀,I{1,3}简化匹配I、II、III\.?:匹配后缀可能附带的点号(如JR.)\s*$:匹配字符串末尾的零个或多个空白字符'i':不区分大小写,兼容jr、Sr等大小写变体(如需严格区分,移除该参数)
测试示例
| 输入字符串 | 处理后输出 |
|---|---|
| SMITH | SMITH |
| SMITH JR. | SMITH |
| SMITH ,JR | SMITH |
| SMITH JR I | SMITH |
| SMITH /SR | SMITH |
| SMITH S | SMITH S |
内容的提问来源于stack exchange,提问作者user1520277
相关产品推荐
相关产品推荐

