Я пытаюсь запустить sql-запрос, где в моей таблице ** сообщений ** у меня есть несколько столбцов, в которых значения разделены двоеточием или запятой. Поэтому, если у него есть значения mul, я пытаюсь сделать его отдельной строкой. Итак, поскольку моя конфигурация не поддерживает использование string_split, поэтому я использую regexp_substr() для разделения строки с использованием разделителей и отображения в нескольких строках.
**messages table**
username id_criteria code_criteria
Kim 22: 21-23:21-22
Tim 36: All
Sam 21,22,23:24:25: (null)
Это то, что я пробовал
**SQL-запрос**
select user_name, trim(regexp_substr(id_criteria,'[^:|^,]+', 1, level) ) as idrefval
from messages
connect by regexp_substr(id_criteria, '[^:|^,]+', 1, level) is not null
Я получаю это в нескольких строках, но не получаю желаемого, то есть либо пропускаю некоторые id_criterias, либо некоторые строки отсутствуют
я становлюсь таким
username id_criteria code_criteria
Sam 23 (null)
Sam 24 (null)
Sam 25 (null)
но ожидаемое должно быть
username id_criteria code_criteria
Kim 22 21-23:21-22
Tim 36 All
Sam 21 (null)
Sam 22 (null)
Sam 23 (null)
Sam 24 (null)
Sam 25 (null)
Итак, если я хочу, чтобы мой code_criteria также состоял из нескольких строк, могу ли я добавить это в существующий запрос?
SELECT user_name,
trim(regexp_substr(id_criteria, '[^:|^,]+', 1, level)) AS idrefval,
trim(regexp_substr(code_criteria, '[^:|^,]+', 1, level)) AS coderefval
FROM messages
CONNECT BY regexp_substr(id_criteria, '[^:|^,]+', 1, level) IS NOT NULL
AND PRIOR user_name = user_name
AND PRIOR id_criteria = id_criteria
AND regexp_substr(code_criteria, '[^:|^,]+', 1, level) IS NOT NULL
AND PRIOR user_name = user_name
AND PRIOR id_criteria = id_criteria
AND PRIOR code_criteria = code_criteria;
В этом запросе используются два предложения CONNECT BY для создания строк для каждого значения id_criteria и code_criteria. Ключевое слово PRIOR используется для указания отношения родитель-потомок между строками.
Обратите внимание, что в этом запросе предполагается, что значения id_criteria и code_criteria разделены двоеточием или запятой. Если есть другие разделители, вам может потребоваться соответствующим образом изменить шаблон регулярного выражения.
Вот пример вывода на основе предоставленных вами образцов данных и измененного запроса:
USERNAME IDREFVAL CODEREFVAL
Kim 22 21-23:21-22
Tim 36 All
Sam 21 null
Sam 22 null
Sam 23 24
Sam 25 null
спасибо чжоу, но все же он пропускает много записей
что это за DBM и какая версия?