如何在数据中包含'%'的列上执行Like in SQL?

How to perform Like in SQL on a column with '%' in the data?

我正在使用 oracle 数据库并为持久层编写相似性过滤器,并希望对可能包含 '%' 数据的列执行相似性。

为了过滤数据,我使用 LIKE 子句作为

编写相似性查询
select * from table where columnName like '%%%';

返回所有值,但我只想要 columnName 中包含 '%' 的行。 不确定要使用什么转义字符或如何过滤 '%' 符号。有什么建议吗??

此外,我必须在 java 中使用 Criteria api 做同样的事情,并且没有关于将转义字符放在那里的线索。

您可以使用转义字符。

where columnName like '%$%%' escape '$'

REGEXP_LIKE 可能会以一种相当简单的方式提供帮助。

SQL> with test (col) as
  2    (select 'abc%def' from dual union all
  3     select '%12345&' from dual union all
  4     select '%abc12%' from dual union all
  5     select '1234567' from dual
  6    )
  7  select *
  8  from test
  9  where regexp_like(col, '%');

COL
-------
abc%def
%12345&
%abc12%

SQL>

如果我理解正确,那么@Littlefoot 的回答是正确的(我现在将对其投赞成票)。我将添加更多详细信息,因为您正在寻找 table "I only want the rows that contains '%' in the columnName".

的列的名称

这是我创建的table:

CREATE TABLE "table_WITH%" ("numer%o" number
                            , name varchar2(50)
                            , "pric%e" number
                            , coverage number
                            , activity_date date);

然后这个查询给了我正确的答案:

SELECT column_name 
FROM ALL_TAB_COLUMNS
WHERE TABLE_NAME = 'table_WITH%'
AND regexp_like(COLUMN_NAME, '%');

Gordon 使用 like 命令的 escape 子句的回答在一般情况下是正确的。

在您的特定情况下(搜索字符串中任意位置的单个字符),更简单的方法是使用 instr,例如

where instr(columnname, '%') > 0