Как проверить наличие одного из значений, разделённых разделителем, в поле строки SQL Oracle

Дано: находим поле (например select field5 from table1 where id = 123456) его значение: Q;W;R;T;TY. Надо: найти в нём значение "T", чистое "T", не наличие "T" вообще, а наличие "T" разделённого ";". Т.е. например мне надо в селект добавить условие, что есть "T" в поле field5. Спасибо!


Ответы (3 шт):

Автор решения: Thr0TT1e

Можно попробовать использовать следующий синтаксис:

SELECT 
  field5 
FROM 
  table1 
WHERE 
  id = 123456 
  AND название_поля_с_искомым_содержимым LIKE 'T;';

Оператор LIKE используется для сравнения строк. В отличие от операторов отношения равно = и не равно <>, LIKE позволяет сравнивать строки не на полное совпадение (не совпадение), а в соответствии с шаблоном. Шаблон может включать обычные символы и символы-шаблоны. При сравнении с шаблоном, его обычные символы должны в точности совпадать с символами, указанными в строке. Символы-шаблоны могут совпадать с произвольными элементами символьной строки.

Символ-шаблон Описание Пример
% Любая строка, содержащая ноль или более символов SELECT * FROM book WHERE author LIKE '%М.%' выполняет поиск и выдает все книги, инициалы авторов которых содержат «М.»
_ (подчеркивание) Любой одиночный символ SELECT * FROM book WHERE title LIKE 'Поэм_' выполняет поиск и выдает все книги, названия которых либо «Поэма», либо «Поэмы» и пр.
→ Ссылка
Автор решения: Akina
CREATE TABLE test (id INT, txt VARCHAR2(255));
INSERT INTO test VALUES (1, 'Q;W;R;T;TY');
INSERT INTO test VALUES (2, 'Q;W;R;TT;TY');
SELECT id, txt, INSTR(';' || txt || ';', ';T;') is_present
FROM test
ID | TXT         | IS_PRESENT
-: | :---------- | ---------:
 1 | Q;W;R;T;TY  |          7
 2 | Q;W;R;TT;TY |          0

db<>fiddle here

→ Ссылка
Автор решения: Alexandr

Еще как вариант можно применить REGEXP_LIKE:

with table1 as (
    select 'Q;W;R;T;TY' as field5,
           12345        as id
    from dual
    union
    select 'Q;W;R;TY' as field5,
           12345      as id
    from dual
    union
    select 'Q;W;R;T' as field5,
           12345     as id
    from dual
    union
    select 'T'   as field5,
           12345 as id
    from dual)
select field5
from table1
where id = 12345
  and regexp_like(field5, '(^|;)T(;|$)');
→ Ссылка