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.