Использование '*' в данных, указывающих на игнорирование условия - PullRequest
0 голосов
/ 16 июня 2020

Мой код 1 ниже показывает ожидаемый результат. Моя цель - использовать '*', чтобы указать на игнорирование условия - в данном случае «кошка, такая как 'col2', связанная с соответствующим столбцом. Итак, желаемый результат моего кода 2 приведен ниже. Как изменить мой код 2, чтобы получить желаемый результат?

Мой код 1

with a as (  
    select 'a____' col1, 'c__' col2  from dual  
    union all  
    select 'a____', 'd__' from dual  
)  
select * from a 
where 'apple' like col1 and 'cat' like col2; 

результат

COL1  COL2
----   -----
a____    c__

Мой код 2

with a as (  
    select 'a____' col1, 'c__' col2  from dual  
    union all  
    select 'a____', '*' from dual  --Data have '*' to indicate ignoring condition
)  
select * from a 
where 'apple' like col1 and 'cat' like col2; --"How to modify here to get desired output?"  

Желаемый результат

col1    col2
------   -------
a____    c__
a____    *

Ответы [ 2 ]

1 голос
/ 16 июня 2020

Вы можете просто добиться этого, используя условие ИЛИ для col1 и col2 следующим образом:

SQL> with a as (
  2      select 'a____' col1, 'c__' col2  from dual
  3      union all
  4      select 'a____', '*' from dual  --Data have '*' to indicate ignoring condition
  5  )
  6  select * from a
  7  where ('apple' like col1 or col2 = '*') -- see this
  8    and ('cat' like col2 or col2 = '*'); -- see this

COL1            COL2
--------------- --------------------
a____           c__
a____           *

SQL>
1 голос
/ 16 июня 2020

В oracle вам нужно использовать % вместо *. Следующее будет работать желаемым образом.

 with a as (  
    select 'a____' col1, 'c__' col2  from dual  
            union all  
            select 'a____', '%' from dual  --Data have '*' to indicate ignoring condition
    )  
    select * from a 
    where 'apple' like col1 and 'cat' like col2;

возвращает

col1    col2
------   -------
a____    c__
a____    % <-- not your desired asterisk, but I guess you want to see the match here

См. Также https://docs.oracle.com/cd/B12037_01/server.101/b10759/conditions016.htm:

  • Подчеркивание (_) в шаблоне соответствует ровно одному символу (в отличие от одного байта в многобайтовом наборе символов) в значении.
  • Знак процента (%) в шаблоне может соответствовать нулю или более символов (в отличие от байтов в многобайтовом наборе символов) в значении. Шаблон "%" не может соответствовать нулю.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...