我想搜索一列并获取值包含\的值。
我试过了select * from "Values" where "ValueName" like '\'
。但没有回报。
还尝试like "\"
和like'\''%'
等。但没有结果。
答案 0 :(得分:2)
请参阅LIKE predicate上的DB2文档,特别是有关转义表达式的部分。
你想要的是
select * from Values where ValueName like '\\%' escape '\'
举一个例子:
create table backslash_escape_test
(
backslash_escape_test_column varchar(20)
);
insert into backslash_escape_test(backslash_escape_test_column)
values ('foo\');
insert into backslash_escape_test(backslash_escape_test_column)
values ('no slashes here');
insert into backslash_escape_test(backslash_escape_test_column)
values ('foo\bar');
insert into backslash_escape_test(backslash_escape_test_column)
values ('\bar');
select count(*) from backslash_escape_test where
backslash_escape_test_column like '%\\%' escape '\';
返回3(所有3行都带有\)。
select count(*) from backslash_escape_test where
backslash_escape_test_column like '\\%' escape '\';
返回1(\ bar行)。
答案 1 :(得分:0)
select * from Values where ValueName like '%\\%'
值是一个不太好的名称,因为它可能与值关键字
混淆答案 2 :(得分:0)
不要逃避它。你只需要这样的通配符:
select count(*)
from escape_test
where test_column like '%\%'
但是,假设你真的需要逃避斜线。这是一个更简单,更直接的答案:
escape-expression允许您指定要转义的任何字符。那么为什么要使用你正在寻找的角色,因此要求你逃脱呢?请改用其他任何字符。我将使用加号作为示例,但它可以是反斜杠,井号,问号,除了您要查找的字符之外的任何内容或其中一个通配符(%或_)。
select count(*)
from escape_test
where test_column like '%\%' escape '+';
现在您不必在喜欢的模式中添加任何内容。
让自己达到@Michael所证明的相同标准 -
create table escape_test
( test_column varchar(20) );
insert into escape_test
(test_column)
values ('foo\'),
('no slashes here'),
('foo\bar'),
('\bar');
select 'test1' trial, count(*) result
from escape_test
where test_column like '%\%'
UNION
select 'test2', count(*)
from escape_test
where test_column like '%\\%' escape '\'
UNION
select 'test3', count(*)
from escape_test
where test_column like '%\%' escape '+'
;
每个方法返回相同的行数:
TRIAL RESULT
----- ------
test1 3
test2 3
test3 3