Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Parsing string with inconsistent pattern

orclrunnerMar 4 2013 — edited Mar 4 2013
I need to parse out a name string which contains: first name, last name, middle name (optional) and suffix (optional). Like this:

'SMITH, JIMMY F'
'SMITH, JIMMY'
'SMITH, JIMMY FARROW'
'SMITH, JR, JIMMY F'

Possible suffix: JR, SR, II, III, IV

Here is what I have so far:
SELECT  SUBSTR('SMITH, JIMMY F', INSTR('SMITH, JIMMY F', ', ') + 1,
          INSTR('SMITH, JIMMY F',' ', 1,2)-1 - INSTR('SMITH, JIMMY F', ', ') + 1) first_name
      , SUBSTR('SMITH, JIMMY F',1,INSTR('SMITH, JIMMY F',', ')-1) last_name
      , CASE
           WHEN INSTR('SMITH, JIMMY F',' ',1,2) = 0
           THEN null
           ELSE
                 SUBSTR(TRIM(trailing '.' FROM 'SMITH, JIMMY F'),
                    INSTR(TRIM(trailing '.' FROM 'SMITH, JIMMY F'), ' ', -1) + 1)
        END middle_name
     , CASE
           WHEN INSTR('SMITH, JIMMY F','JR') > 0
           THEN
                 'JR'
           WHEN INSTR('SMITH, JIMMY F','SR') > 0
           THEN
                 'SR'
           WHEN INSTR('SMITH, JIMMY F','II') > 0
           THEN
                 'II'
           WHEN INSTR('SMITH, JIMMY F','III') > 0
           THEN
                 'III'
           WHEN INSTR('SMITH, JIMMY F','IV') > 0
           THEN
                 'IV'
           ELSE
                  null
       END  suffix
FROM dual ;

FIRST_NAME           LAST_NAME            MIDDLE_NAME  SUFFIX
-------------------- -------------------- ------------ ------
 JIMMY               SMITH                F
But I need suggestions on getting this to work with all 4 patterns listed above.
This post has been answered by Frank Kulash on Mar 4 2013
Jump to Answer
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Apr 1 2013
Added on Mar 4 2013
3 comments
537 views