使用regexp_substr

时间:2018-07-23 01:43:00

标签: sql oracle plsql

我已经搜索了所有内容,但找不到所需的表达式。真的可以使用一些帮助。

这是一个示例字符串,我想分为三列...姓,名和中间名首字母。我能够毫不费力地取出姓氏,因为它始终是第一个逗号之前的字符串。

我需要帮助的地方是名字和中间名字的缩写。这些数据中有些空间使事情变得复杂。

这是示例字符串,需要我帮忙进行拆分。

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

1 个答案:

答案 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