如何在数据中包含'%'的列上执行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
我正在使用 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