我已经搜索了所有内容,但找不到所需的表达式。真的可以使用一些帮助。
这是一个示例字符串,我想分为三列...姓,名和中间名首字母。我能够毫不费力地取出姓氏,因为它始终是第一个逗号之前的字符串。
我需要帮助的地方是名字和中间名字的缩写。这些数据中有些空间使事情变得复杂。
这是示例字符串,需要我帮忙进行拆分。
NameString =“ ARREOLA-GONZALEZ,LUZ M”
我可以使用REGEXP_SUBSTR(NameString,'[^,] +',1,1)
提取姓氏有人可以帮我提供名字和中间名缩写的表达吗?另外,并不总是有中间名首字母...因此,如果中间名首字母不存在,则需要返回null。
这是到目前为止我得到的:
REGEXP_SUBSTR(NameString,'[^,]+',1,1) "LAST_NAME",
TRIM( REGEXP_SUBSTR(NameString,'[^,]+$') ) "FIRST_NAME",
REGEXP_SUBSTR( TRIM(REGEXP_SUBSTR(NameString, '[^, ]+$' )), '[^ ]+$') "MIDDLE_NAME",
哪个会产生:
LAST_NAME FIRST_NAME MIDDLE_NAME
----------------------------------------------
ARREOLA-GONZALEZ LUZ M M
答案 0 :(得分:1)
这应该做到:
select regexp_substr(name, '[^,]+', 1, 1) as lastname,
regexp_substr(name, '[^ ]+', 1, 2) as firstname,
regexp_substr(name, '[^ ]+', 1, 3) as middle
换句话说,您可以在名字和中间名之间使用空格。
如果可以使用逗号或空格作为分隔符,那么我认为您可以这样做:
select regexp_substr(name, '[^,]+', 1, 1) as lastname,
regexp_substr(name, '[^ ,]+', 1, 2) as firstname,
regexp_substr(name, '[^ ,]+', 1, 3) as middle