2011-10-25 67 views
0

我想搜索一个列并获取value containts \的值。我试过select * from "Values" where "ValueName" like '\'。但是没有价值。在DB2中处理转义序列char

也试过like "\"like'\''%'等,但没有结果。

回答

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(\栏行)。

+0

不工作。我尝试了'%\\%'和'Prefix \\%'。两者都返回没有值。 – Cannon

+0

对不起,忘了包含它的“ESCAPE”部分。更新了我的答案。 –

+0

非常感谢。这工作。 – Cannon

0
select * from Values where ValueName like '%\\%' 

值是一个不那么好的名字,因为它可能会混淆的价值观关键字

0

不要逃避它。你只需要围绕它通配符这样的:

select count(*) 
    from escape_test 
    where test_column like '%\%' 

但是,假设你真的需要逃跑的斜线。这里有一个更简单,更直接的答案:

escape-expression允许你指定任何你想要转义的字符。那么为什么要使用你正在寻找的角色,因此要求你逃脱它呢?改用任何其他字符。我将使用加号作为示例,但它可能是反斜杠,磅符号,问号,除您正在查找的字符或其中一个通配符(%或_)之外的任何内容。

select count(*) 
    from escape_test 
    where test_column like '%\%' escape '+'; 

现在你不需要添加任何东西到你的喜欢模式。

为了保持自己举证同一标准@迈克尔证明 -

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