список через запятую oracle sql - PullRequest
0 голосов
/ 28 января 2020

У меня есть список значений через запятую в одном поле, и мне нужно найти все строки, которые соответствуют определенным критериям. Я использую код:

select * from table where column_name in
(
select regexp_substr('A+','A-','aabn','[^,]+', 1,level) from table
connect by regexp_substr('A+','A-','aabn', '[^,]+', 1,level) is not null
);

, поэтому я хочу найти все строки, которые содержат A +, A- и aabn

Ответы [ 2 ]

1 голос
/ 28 января 2020

Почему бы просто не использовать одно регулярное выражение?

where regexp_like(column_name, '(^|,)(A[+]|A[-]|aabn)($|,)')

Здесь - это БД <> скрипка.

Кроме того, такие мощные, как регулярные выражения, Вы не должны хранить несколько значений в одной строке. Oracle имеет много других опций для хранения нескольких значений, включая традиционную таблицу связей / соединений.

0 голосов
/ 28 января 2020

Вам не нужны регулярные выражения, просто используйте LIKE, чтобы убедиться, что требуемое значение является подстрокой столбца (оба окружены символами-разделителями):

Если вы хотите, чтобы все 3 затем в списке используйте AND:

SELECT *
FROM   table_name
WHERE  ',' || column_name || ',' LIKE '%,A+,%'
AND    ',' || column_name || ',' LIKE '%,A-,%'
AND    ',' || column_name || ',' LIKE '%,aabn,%'

Если вы хотите 1 в списке, используйте OR:

SELECT *
FROM   table_name
WHERE  ',' || column_name || ',' LIKE '%,A+,%'
OR     ',' || column_name || ',' LIKE '%,A-,%'
OR     ',' || column_name || ',' LIKE '%,aabn,%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...