Вы можете сделать это в чистом SQL с использованием SUBSTR и Instr для извлечения подстроки между разделителем |
.
Для простых манипуляций с строками, я предпочитаю SUBSTR + INSTR
подход, так как это still faster than the REGEXP. Конечно, с недавними выпусками, разница в производительности снижается, однако REGEXP по-прежнему более интенсивно работает по ЦП, чем старый SUBTR+INSTR
.
Например,
SQL> WITH sample_data AS
2 (SELECT 'AP1|Apple Juice|100' str
3 FROM dual
4 )
5 -- end of sample_data mocking as a table
6 SELECT str,
7 SUBSTR(str, 1, instr(str, '|', 1,1) -1) str1,
8 SUBSTR(str, instr(str, '|', 1, 1) + 1,
9 instr(str, '|', 1, 2) -
10 instr(str, '|', 1, 1) -1) str2,
11 SUBSTR(str, instr(str, '|', 1, 2) + 1) str3
12 FROM sample_data;
STR STR1 STR2 STR3
------------------- ------------------- ------------------- ----
AP1|Apple Juice|100 AP1 Apple Juice 100
На стороне записки, вы не должны хранить данные в виде строки с разделителями, это действительно плохой дизайн. Вы должны нормализовать это как постоянное исправление. Насколько возможно, сохраните атрибуты в разных столбцах, тогда у вас нет накладных расходов на обработку строки для извлечения соответствующих атрибутов.
Существуют различные решения в посте я идентифицированной. Выберите тот, который соответствует вашей версии и другим требованиям. Вероятно, решение SQL с регулярным выражением проще всего реализовать. (Все решения используют ',' как разделитель, поэтому замените это на '|'). – APC
Извините, забыл упомянуть, я хотел использовать только запрос (без создания процедуры хранения, функции), но приведенные примеры использовали его. – hades
Хорошо, я снова открыл его. – APC