Необходимо SQL запрос в Oracle, чтобы получить фамилию из строки, разделенной запятой - PullRequest
0 голосов
/ 08 февраля 2020
name
------
[pratik]
[Ishaan,llc,ltd]
[sundaar,j]
[sid,h]

output should be like:
name                last_name
------              ---------
[pratik]            null
[Ishaan,llc,ltd]    ltd
[sundaar,j]         j
[sid,h]             h

Есть ли способ, с помощью которого мы можем достичь вышеуказанного в Oracle SQL

Ответы [ 3 ]

1 голос
/ 08 февраля 2020

Вы можете использовать regexp_substr с regexp_count oe instr для достижения желаемого результата следующим образом:

Select case when regexp_count(name, ',') > 0 
            then replace(regexp_substr(name, '[^,]+$'),']','')
       end
From your_table

Cheers !!

1 голос
/ 08 февраля 2020

Вы можете использовать regexp_substr():

select replace(replace(regexp_substr(name, ',([^,]+)\]$'), ',', ''), ']', '') as last_name

Или использовать regexp_replace():

select regexp_replace(name, '^(.*,|[\[a-zA-Z]+)([^,]*)\]$', '\2') 

Здесь - это скрипта db <>.

Следует отметить, что хранить несколько значений в строке - плохая идея. SQL и Oracle имеют много лучших решений, чем перегрузка определения строки.

0 голосов
/ 09 февраля 2020

Эта опция использует вложенную regexp_substr:

  • внутреннюю возвращаемую подстроку между последней запятой и ] скобкой. Например, для [sundaar,j] он возвращает ,j]
  • external возвращает слово между , и ]

Итак:

SQL> with test (name) as
  2    (select '[pratik]'         from dual union all
  3     select '[Ishaan,llc,ltd]' from dual union all
  4     select '[sundaar,j]'      from dual union all
  5     select '[sid,h]'          from dual
  6    )
  7  select name,
  8    regexp_substr(regexp_substr(name, ',\w+]$'), '\w+') last_name
  9  from test;

NAME             LAST_NAME
---------------- --------------------
[pratik]
[Ishaan,llc,ltd] ltd
[sundaar,j]      j
[sid,h]          h

SQL>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...