обрабатывать escape-последовательность char в DB2 - PullRequest
0 голосов
/ 26 октября 2011

Я хочу найти столбец и получить значения, в которых содержится значение \.

Я пытался select * from "Values" where "ValueName" like '\'. Но не возвращает значения.

Также пробовал like "\" и like'\''%' и т. Д. Но результатов нет.

Ответы [ 3 ]

2 голосов
/ 26 октября 2011

См. Документацию DB2 по предикату LIKE , в частности части о escape-выражениях.

То, что вы хотите, это

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).

0 голосов
/ 25 августа 2012

Не избегай этого.Вам просто нужны подстановочные знаки вокруг этого, например:

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

Но, предположим, вам действительно нужно избежать косой черты.Вот более простой и простой ответ:

escape-выражение позволяет вам указать любой символ для экранирования, который вы пожелаете.Так зачем использовать персонажа, которого вы ищете, тем самым требуя от него избежать?Вместо этого используйте любой другой символ.Я буду использовать знак плюс в качестве примера, но это может быть обратная косая черта, знак решетки, вопросительный знак, что угодно, кроме искомого символа или одного из символов подстановки (% или _).

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
0 голосов
/ 26 октября 2011
select * from Values where ValueName like '%\\%'

values ​​- не очень хорошее имя, потому что его можно спутать с ключевым словом values ​​

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...