ORACLE Query: выберите Text, когда значение имеет «/» в имени - PullRequest
0 голосов
/ 28 августа 2018

Мне нужно выбрать элементы в таблице, когда они соответствуют следующим критериям:

1/2 тонны TRCK с инструментами (A) или 1/2 тонны TRCK с инструментами (B)

Но НЕ СООТВЕТСТВУЕТ 3 / 4-1 ТОННОВОМУ ТРУБУ с ИНСТРУМЕНТАМИ или любой другой комбинацией.

Я пытался использовать подстановочные знаки.

Select *
FROM Table
WHERE UNIT_ID LIKE '1/2 TON TRCK W/TOOLS (A)'

Это не работает. Единственное, что работает, - это использование «% Tools». К сожалению это тянет на другие записи, которые я не хочу.

Я также пытался использовать REGEX

WHERE regexp_like (unit_id, ' ^ (1/2 TON TRCK W/TOOLS) ')

Ответы [ 4 ]

0 голосов
/ 28 августа 2018

Опасаясь избить мертвую лошадь, вы можете использовать regexp_like, просто исключить скобки, так как они имеют особое значение в языке regex, и использовать символ канала для ИЛИ. Это регулярное выражение специально ищет символ «A» или «B» (обозначается квадратными скобками) внутри буквенных скобок.

SQL> with tbl(str) as (
     select '1/2 TON TRCK W/TOOLS (A)' from dual union all
     select '1/2 TON TRCK W/TOOLS (B)' from dual union all
     select '3/4-1 TON TRUCK W/TOOLS'  from dual
   )
   select str
   from tbl
   where regexp_like(str, '1/2 TON TRCK W/TOOLS \([A|B]\)');

STR
------------------------
1/2 TON TRCK W/TOOLS (A)
1/2 TON TRCK W/TOOLS (B)

SQL>
0 голосов
/ 28 августа 2018

В вашем примере нет подстановочного знака, он должен быть

Select *
FROM Table
WHERE UNIT_ID LIKE '1/2 TON TRCK W/TOOLS (%)'

Like не будет работать без% или _

0 голосов
/ 28 августа 2018

REGEX действительно работает, если я включаю подстановочный знак для круглых скобок вокруг A

WHERE regexp_like (unit_id, '(1/2 TON TRCK W/TOOLS.A.)')

или

WHERE UNIT_ID LIKE '1/2 TON TRCK W/TOOLS (%)'

как указал каякпим

0 голосов
/ 28 августа 2018
Select *
FROM Table
WHERE UNIT_ID in('1/2 TON TRCK W/TOOLS (A)', '1/2 TON TRCK W/TOOLS (B)')
...