У меня есть таблица, и один из столбцов содержит строку с элементами, разделенными точками с запятой (;)
Я хочу выборочно перенести данные в новую таблицу на основе шаблона String.
Например, это может выглядеть как
16 ;; 14; 30; 24; 11; 13; 14; 14; 10; 13; 18; 15; 18; 24;13/18; 11 23 ;;; 12 19 ;;; 10 ;;: 11; 26 42 ;;;; 26; 38/39; 12 11 ;;;;;;; ;;;;;;;;;;;;;;;
или
11 ;; 11; 11; 11; 11; 11; 11; 11; 11; 11; 11; 11; 11; 11; 11; 11; 11; 11 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Мне не важно, что находится между точками с запятой, но мне важно, какие позиции содержат элементы.Например, если я хочу, чтобы только 1-я, 3-я, 4-я позиции содержали элементы, я бы разрешил следующее ...
32 ;; 14; 18/12 ;;;;;;;;;;или 32 ;; 14; 18/12 ;;;; 55 ;;;; 11 ;;;;;;;
Этот внизу не подходит, потому что третья позиция не удерживаетзначение.
32 ;;; 18/12 ;;;;;;;;;
Если для этого работает регулярное выражение, то я могу использовать merge into
дляпереместить нужные записи в целевую таблицу.Если это невозможно, мне придется обрабатывать каждую запись в Java и выборочно вставлять записи в новую таблицу.
исходная таблица:
id | StringValue | count
целевая таблица:
id | StringValue | count
sql, который я имею в виду:
merge into you_target_table tt
using ( select StringValue, count
from source_table where REGEXP_LIKE ( StringValue, 'some pattern')
) st
on ( st.StringValue = tt.StringValue and st.count=tt.count )
when not matched then
insert (id, StringValue , count)
values (someseq.nextval, st.value1, st.count)
when matched then
update
set tt.count = tt.count + st.count;
Также я уверен, что все StringValue в исходной таблице уникальны, так что то, что после when matched then
не важно, но из-зак синтаксису, я думаю, что я должен что-то иметь.