我想从表格中选择名称'列包含'%'价值中的任何地方。例如,我想检索名称'批准以获得零件的20%折扣。
SELECT NAME FROM TABLE WHERE NAME ... ?
答案 0 :(得分:5)
您可以将like
与escape
一起使用。默认值是某些数据库中的反斜杠(但不在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
的建议会得到正确的答案,但他们会慢慢地这样做。过滤函数结果只需要比字段过滤更长的时间。