#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