Как извлечь определенную строку из столбца

Я пытаюсь извлечь определенную строку, начинающуюся с «A0», и вернуть мне строку A0 вместе с остальными 9 значениями из столбца в таблице. Мне нужно извлечь номер авторизации в столбце примечаний к претензиям в таблице.

Я пытаюсь использовать функцию regexp_substr. Я хочу извлечь любую строку, начинающуюся с «A0» в столбце clm_notes в таблице.

SELECT 
regexp_substr(CLM_NOTES, '[^A0]+', 1,1) as auth_num
FROM claims_table

так столбец выглядит в таблице

Clm_notes column 
New Auth from auth - A071869573

Желаемые результаты, которые я хочу, - это извлечь строку, начинающуюся с «A0».

A071869573


person cardonas    schedule 04.06.2019    source источник
comment
У меня вопрос, формат вывода соответствует? Я имею в виду, что у них у всех есть дефисы?   -  person Standin.Wolf    schedule 04.06.2019
comment
да, формат всегда один и тот же.   -  person cardonas    schedule 04.06.2019
comment
Зачем вам регулярное выражение?   -  person forpas    schedule 04.06.2019
comment
Это единственная функция, которая, кажется, соответствует тому, что мне нужно, но все еще не уверена.   -  person cardonas    schedule 04.06.2019
comment
всегда в одном и том же положении? длина строки всегда одинакова?   -  person hotfix    schedule 04.06.2019
comment
@hotfix, спасибо, что сообщили мне. Я не видел, что это была база данных Oracle.   -  person Standin.Wolf    schedule 04.06.2019


Ответы (2)


Вам понадобится что-то вроде следующего:

SELECT 
regexp_substr(CLM_NOTES, 'A0.*$', 1,1) as auth_num
FROM claims_table

Или, возможно, если все символы после A0 являются цифрами:

SELECT 
regexp_substr(CLM_NOTES, 'A0[0-9]*$', 1,1) as auth_num
FROM claims_table

Другой более быстрый способ может быть следующим:

SELECT 
substr(CLM_NOTES, instr(CLM_NOTES,'A0')) as auth_num
FROM claims_table
person Radagast81    schedule 04.06.2019
comment
Спасибо, это сработало. Я собираюсь изучить, почему это сработало. Спасибо еще раз. - person cardonas; 04.06.2019
comment
Могу ли я предложить сделать сопоставление как можно более конкретным для данных, которые вы ищете, чтобы избежать ложных срабатываний. Например, совпадите с дефисом, пробелом «A0», если за ним следуют 8 цифр: '- A0\d{8}'. Вы проводите различие между допуском и рефералом или «А» для авторизации в целом? - person Gary_W; 04.06.2019
comment
Хорошая точка зрения! Спасибо Гэри. Я не принял это во внимание. Я обновил заявление, чтобы избежать каких-либо проблем. Спасибо еще раз. - person cardonas; 04.06.2019

Вместо того, чтобы сопоставлять то, что вы хотите, сопоставьте то, что вы не хотите, и удалите это:

select
    regexp_replace(CLM_NOTES, '.*- A0', 'A0') as auth_num
from claims_table

Это соответствует всему, что предшествует '- A0' включительно, и заменяет его только 'A0', эффективно удаляя все, предшествующее 'A0'.

person Bohemian♦    schedule 04.06.2019