我在数据库中有 cust_nm 列。cust_nm 列用姓氏格式化,然后名字用逗号分隔,后面跟一个空格,而不是中间的首字母。
东格斯维克,马克 M
我想运行一个 Oracle 查询来输出这种格式。
如果你所有的名字都真的是那个确切的格式,你可以做这样的事情
SQL> ed
Wrote file afiedt.buf
1 with x as (
2 select 'TUNGESVIK, MARK M' cust_nm from dual
3 )
4 select substr( cust_nm, 1, instr(cust_nm, ', ')-1 ) last_name,
5 substr( cust_nm, instr(cust_nm, ', ')+2, instr(cust_nm, ' ', -1) - instr(cust_nm, ', ')-2) first_name,
6 substr( cust_nm, instr(cust_nm, ' ', -1)+1, length(cust_nm) ) middle_initial
7* from x
SQL> /
LAST_NAME FIRS M
--------- ---- -
TUNGESVIK MARK M
当你开始包括没有中间名首字母(或有多个中间名首字母)的人、姓或名中有多个空格的人时,至少有一些名字不是这种格式而是其他格式的概率,事情变得更具挑战性。有些软件产品的唯一目的是获取传入的名称数据,对其进行解析、清理和标准化。编写自己的代码来尝试处理每个极端情况可能需要比您预期的更多的时间。