sql строка сравнения оракула, содержащая подстроку - PullRequest
0 голосов
/ 12 февраля 2019

Я использую sql Oracle и в моей БД есть таблица с некоторыми значениями для действия.Например:

id  action
1   REH001
2   REH002
3   REH003
4   LOA001
5   LOA002
6   RFL

Я хочу получить идентификатор, если действие соответствует подстроке с несколькими значениями (с разделителем;)

Например, я хочу сравнить его со строкой LOA;RFL Поэтому я хочу получить идентификатор, если 3 первых символа равны LOA или RFL.Для этого примера он должен вернуть идентификаторы 4,5 и 6

Но это не всегда 3 первых символа.Например, я хочу получить идентификаторы для совпадения с подстрокой REH003;TRE. Для моего примера это вернет мне идентификатор 3

Я попытался упростить свой вопрос, потому что это очень сложно объяснить, но ядумаю, вы поймете с моими примерами.

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

отметьте это:

SQL Fiddle

Настройка схемы Oracle 11g R2 :

CREATE TABLE t
    ("id" int, action varchar2(6))
;

INSERT ALL 
    INTO t ("id", action)
         VALUES (1, 'REH001')
    INTO t ("id", action)
         VALUES (2, 'REH002')
    INTO t ("id", action)
         VALUES (3, 'REH003')
    INTO t ("id", action)
         VALUES (4, 'LOA001')
    INTO t ("id", action)
         VALUES (5, 'LOA002')
    INTO t ("id", action)
         VALUES (6, 'RFL')
SELECT * FROM dual
;

Запрос 1 :

with cte0 as 
(
   select trim(regexp_substr(c, '[^;]+', 1, levels.column_value))  as r from 
  (
     select 'LOA001;RFL' c FROM DUAL
  ) ti,
    table(cast(multiset(select level from dual 
        connect by  level <= length (regexp_replace(c, '[^;]+'))  + 1) as sys.OdciNumberList)) levels
)
select * from cte0
inner join t on substr(action, 1,length(r)) = r

Результаты :

|      R | id | ACTION |
|--------|----|--------|
| LOA001 |  4 | LOA001 |
|    RFL |  6 |    RFL |
0 голосов
/ 12 февраля 2019

Вы можете преобразовать входную строку в регулярное выражение:

where regexp_like(action, '^(' || replace(:compare_string, ';', '|') || ')')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...