Найти, начинается ли строка с указанной строки в clob, а затем извлечь

У меня есть столбец CLOB, в котором я хочу найти строку, начинающуюся с «305», а затем извлечь что-то из этой строки, некоторые из моих строк будут иметь несколько строк, начинающихся с «305» или «305» где-то во всей ячейке, поэтому Я бы только хотел найти первую строку, где она начинается с «305», все содержимое ячейки разделено на такие строки

301|10500000908|
302|20171021|20171104|
303|00001|8306.7|
302|20171008|20171020|
303|00001|13174.5|
302|20170704|20171007|
303|00001|2508.7|
302|20170419|20170703|
303|00001|6962.9|
302|20170330|20170418|
303|00001|7628.2|
302|20170305|20170329|

--- my instr(dbms_lob.substr(flow_data, 4000, 1 ),'305|', 1, 1) keeps finding this line

303|00001|8489.1|
302|20170120|20170304|
303|00001|1997.9|
302|20161021|20170119|
303|00001|12359.8|
302|20160722|20161020|
303|00001|7354.0|
302|20160516|20160721|
303|00001|26.4|
304|20171105|
305|00001|5936.1|    


--- i want to find this line and then extract the '5936.1' from it

304|20171021|
305|00001|5710.4|
304|20171008|
305|00001|5163.1|
304|20170704|
304|20170419|
305|00001|7390.8|
304|20170330|
305|00001|7363.2|
304|20170305|
305|00001|7181.4|
304|20170120|
305|00001|9200.2|
304|20161021|
305|00001|4791.3|
305|00001|2877.5|
304|20160516|
305|00001|4116.9|
306|0393|20160511|
307|SUPP|20160511|
310|A|20160511|
311|E|20160516|

когда я использую instr(dbms_lob.substr(flow_data, 4000, 1 ),'305|', 1, 1), он продолжает находить неправильную строку. кстати, между строками нет пробелов, я вставил их, чтобы текст разделялся.

Спасибо всем

Мак

Почему это вообще тряпка? Структурированные данные должны помещаться в таблицы, а не в строки, содержащие несколько значений.

MatBailie 20.12.2020 19:09

привет, было бы здорово, если бы это произошло, но, к сожалению, моя отрасль использует данные именно так.

mac 21.12.2020 23:48
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
2
186
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если я правильно вас понял, вы можете использовать regexp_substr():

select regexp_substr(flow_data, '^305\|[^|]*\|([^|]*)', 1, 1, 'm', 1) as val
from t

Разбивка аргумента:

  • flow_data: значение для поиска (допускаются CLOB)

  • '^305\|[^|]*\|([^|]*)': регулярное выражение. Мы ищем 305 в начале строки и фиксируем третье значение в списке CSV.

  • 1: начать поиск с начала исходной строки

  • 1: вернуть первый матч

  • m - многострочный режим: ^ совпадения в начале каждой строки

  • 1: вернуть первую захваченную часть матча

о, ничего себе, это творит чудеса, вы объяснили это так, что это помогло мне взглянуть на другие потоки и адаптировать то, что вы мне дали. я думаю, что это «шаблон», с которым я борюсь, я использую «techonthenet.com/oracle/functions/regexp_substr.php», но я просто не мог понять это. Спасибо

mac 21.12.2020 23:49

Другие вопросы по теме