В SQL Developer, вы можете запросить одно и то же текстовое поле для LIKE и NOT LIKE? - PullRequest
0 голосов
/ 30 марта 2020

Можете ли вы запросить одно и то же текстовое поле для LIKE и NOT LIKE? Например, если строка с произвольным текстом содержит

«Пациент ПОЛОЖИТЕЛЬНЫЙ. Тестирование проводилось в XYZ Clini c».

Я хочу выбрать слово «ПОЗИТИВНО», но не тогда, когда «XYZ» находится в том же поле, поэтому я не хочу, чтобы указанная выше строка соответствовала.

Я пробуем строку ниже, но она все еще квалифицирует строки с помощью 'XYZ'.

WHERE FreeTextRow like '%POSITIVE%' and FreeTextRow not like '%XYZ%' 

Ответы [ 2 ]

0 голосов
/ 30 марта 2020

Вам необходимо опубликовать полное предложение where, чтобы мы могли найти решение.

Например, ниже приведены результаты, которые вы не ожидали

    WHERE FreeTextRow like '%POSITIVE%' and FreeTextRow not like '%XYZ%' OR DATE_ON='22-JAN-2019'

Итак, что вам нужно сделать это ниже

    WHERE (FreeTextRow like '%POSITIVE%' and FreeTextRow not like '%XYZ%') OR 
           (DATE_ON='22-JAN-2019' AND FreeTextRow NOT like '%POSITIVE%')
0 голосов
/ 30 марта 2020

Если это так, вы сделали что-то не так. Регистр имеет значение!

SQL> with test (id, text) as
  2    (select 1, 'Patient is POSITIVE. Testing was done at XYZ clinic'     from dual union all
  3     select 2, 'Patient is not POSITIVE. Testing was done at ZZZ clinic' from dual union all
  4     select 3, 'Patient is POSITIVE; testing at xyz clinic'              from dual
  5    )
  6  select *
  7  from test
  8  where text like '%POSITIVE%'
  9    and text not like '%XYZ%';

        ID TEXT
---------- -------------------------------------------------------
         2 Patient is not POSITIVE. Testing was done at ZZZ clinic
         3 Patient is POSITIVE; testing at xyz clinic                --> lower case "xyz"

SQL>

Вы можете применить, например, upper function:

  8  where upper(text) like '%POSITIVE%'
  9    and upper(text) not like '%XYZ%';

        ID TEXT
---------- -------------------------------------------------------
         2 Patient is not POSITIVE. Testing was done at ZZZ clinic

SQL>

Или использовать регулярные выражения с учетом без учета регистра ('i'):

  8  where regexp_like(text, 'POSITIVE', 'i')
  9    and not regexp_like(text, 'XYZ', 'i');

        ID TEXT
---------- -------------------------------------------------------
         2 Patient is not POSITIVE. Testing was done at ZZZ clinic

SQL>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...