Замена Oracle REGEXP_REPLACE; строки с разделителями на строки в кавычках

#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’)