选择包含'%'列的语句

时间:2015-10-23 15:33:02

标签: sql oracle

我想从表格中选择名称'列包含'%'价值中的任何地方。例如,我想检索名称'批准以获得零件的20%折扣。

SELECT NAME FROM TABLE WHERE NAME ... ?

4 个答案:

答案 0 :(得分:5)

您可以将likeescape一起使用。默认值是某些数据库中的反斜杠(但不在Oracle中),因此:

select name
from table
where name like '%\%%' ESCAPE '\'

这是标准的,适用于大多数数据库。 Oracle文档是here

当然,您也可以使用instr()

where instr(name, '%') > 0

答案 1 :(得分:0)

一种方法是使用带有空字符串的replace并检查原始字符串和修改后的字符串的长度差异是否为> 0

select name 
from table 
where length(name) - length(replace(name,'%','')) > 0

答案 2 :(得分:0)

让自己轻松生活,只需使用REGEXP_LIKE()!

SQL> with tbl(name) as (
      select 'ABC' from dual
      union
      select 'E%FS' from dual
    )
    select name
    from tbl
    where regexp_like(name, '%');

NAME
----
E%FS

SQL>

答案 3 :(得分:-1)

我阅读了戈登提到的文件。相关的句子是:

An underscore (_) in the pattern matches exactly one character (as opposed to one byte in a multibyte character set) in the value

这是我的测试:

select c 
from (
select 'a%be' c
from dual) d
where c like '_%'

返回了值a%be

虽然在其他两个答案中使用instr()length的建议会得到正确的答案,但他们会慢慢地这样做。过滤函数结果只需要比字段过滤更长的时间。