ORACLE 查询:Select 当值的名称中包含“/”时的文本

ORACLE Query: Select Text when value has "/" in the name

我需要 select 个 table 符合以下条件的项目:

1/2 吨卡车 W/TOOLS (A) 或 1/2 吨卡车 W/TOOLS (B)

但不匹配 3/4-1 吨卡车 W/TOOLS 或任何其他组合。

我试过使用通配符。

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) ')
Select *
FROM Table
WHERE UNIT_ID in('1/2 TON TRCK W/TOOLS (A)', '1/2 TON TRCK W/TOOLS (B)')

尽管您的示例中没有通配符,但它应该是

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

如果没有 % 或 _

将无法点赞

如果我在 A

周围的括号中包含通配符,则 REGEX 确实有效
WHERE regexp_like (unit_id, '(1/2 TON TRCK W/TOOLS.A.)')

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

正如 kayakpim 指出的那样

冒着打死马的风险,您可以使用 regexp_like,只需转义括号,因为它们在正则表达式 'language' 中具有特殊含义,并使用竖线符号表示 OR。此正则表达式专门查找文字括号内的 '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>