如何使用SQL Loader按规则拆分全大写姓氏至新列?
SQL Loader拆分全大写姓氏至新列解决方案
针对你需要从平面文件的姓名中提取全大写形式(含连字符)姓氏的需求,可通过SQL Loader结合Oracle正则表达式函数实现,以下是具体方案:
核心思路
利用Oracle的REGEXP_SUBSTR函数,匹配姓名字符串中由大写字母(A-Z)和连字符(-)组成的连续序列,该序列即为目标姓氏。
控制文件示例
假设你的平面文件names.dat每行存储一个姓名,内容如下:
THOMAS Young SMITH Lucas (A.K.A Luca SMITH) Dan bin Islam bin Al-BALUSHI James GORDON-LOPEZ
对应的SQL Loader控制文件load_names.ctl配置如下:
LOAD DATA INFILE 'names.dat' INTO TABLE person_info FIELDS TERMINATED BY '\n' -- 按换行符分隔每行数据 TRAILING NULLCOLS ( full_name CHAR(100), -- 读取完整姓名 last_name CHAR(50) "REGEXP_SUBSTR(:full_name, '([A-Z]+(?:-[A-Z]+)*)', 1, 1, 'c')" )
正则表达式说明
'([A-Z]+(?:-[A-Z]+)*)':
[A-Z]+:匹配一个或多个大写字母(?:-[A-Z]+)*:支持带连字符的姓氏,匹配零个或多个“-+大写字母”组合'c'参数:开启区分大小写,确保仅匹配全大写序列
验证效果
该配置对示例姓名的拆分结果完全符合需求:
| 原姓名 | 拆分出的姓氏 |
|---|---|
| THOMAS Young | THOMAS |
| SMITH Lucas (A.K.A Luca SMITH) | SMITH |
| Dan bin Islam bin Al-BALUSHI | BALUSHI |
| James GORDON-LOPEZ | GORDON-LOPEZ |
内容的提问来源于stack exchange,提问作者John Al
相关产品推荐
相关产品推荐

