обрабатывать символы escape-последовательности в DB2

#db2

#db2

Вопрос:

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

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

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

Ответ №1:

См. Документацию 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 ('foobar');
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. Не работает. Я попробовал ‘%\%’ и ‘Prefix \%’. Оба возвращены без значений.

2. Извините, забыл включить в него «ESCAPE». Обновил мой ответ.

Ответ №2:

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

values — не очень подходящее имя, потому что его можно спутать с ключевым словом values

Ответ №3:

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

 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'),
         ('foobar'),
         ('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