#sql #regex #string #oracle
#sql #регулярное выражение #строка #Oracle
Вопрос:
Мне нужна простая функция замены, которая заменяет список строк, разделенных точкой с запятой, на строки, заключенные в кавычки, разделенные запятыми.
‘123;Asd;_P1;’ заменяет на ‘123’, ‘Asd’, ‘_P1’
Попробовал это, но в последней строке пропущены кавычки, а также строка может иметь другие символы.
SELECT REGEXP_REPLACE('123;234;345;123','([[:alnum:]] );', '''1'',') List FROM DUAL;
Ответ №1:
Я не думаю, что вам regexp_replace
здесь нужно, простого replace
должно быть достаточно. Похоже, что вы просто хотите заменить точку с запятой строкой «‘, ‘», а затем добавить одинарную кавычку до и после строки.
select q'{'}' ||
replace( '123;234;345;123', ';', q'{','}' ) ||
q'{'}'
from dual
Комментарии:
1. Я не могу заставить это работать в предложении WHERE.
WHERE Col1 IN (q'{'}' || replace('MK2.3;P002;0001112', ';',q'{','}') || q'{'}'))
Не могли бы вы сообщить мне, чего мне не хватает?2. @AnitaKulkarni — Это потому, что вы задали неправильный вопрос. Вы не можете использовать строковые преобразования для преобразования одной строки с разделителями в набор строк в
WHERE
предложении. Вы можете проанализировать строку с разделителями для заполнения коллекции и использовать эту коллекцию в своем запросе asktom.oracle.com/pls/apex /…
Ответ №2:
SELECT REGEXP_REPLACE( REGEXP_REPLACE('123;234;345;123','([[:alnum:]] );', '''1'','), ',([[:alnum:]] )', ',''1''') FROM DUAL;
Комментарии:
1. что делать, если поля содержат символы, отличные от буквенно-цифровых? (Например, ‘_P1’)