2011-10-25 66 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