处理DB2中的转义序列char

时间:2011-10-25 21:48:37

标签: db2

我想搜索一列并获取值包含\的值。

我试过了select * from "Values" where "ValueName" like '\'。但没有回报。

还尝试like "\"like'\''%'等。但没有结果。

3 个答案:

答案 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