Экранирование в LIKE - PullRequest
0 голосов
/ 27 июня 2018

Как мне избежать подстановочных знаков (_ и %) при использовании оператора SQL LIKE в Oracle?

Я пришел к глупой проблеме сегодня. Мне нужно найти наличие подчеркивания _ в столбце varchar, используя LIKE. Это не работает - как и ожидалось - так как подчеркивания являются подстановочными знаками согласно SQL Вот мой (упрощенный) код:

create table property (
  name varchar(20),
  value varchar(50)
);

insert into property (name, value) values ('port', '8120');
insert into property (name, value) values ('max_width', '90');
insert into property (name, value) values ('taxrate%', '5.20');

Я попробовал следующие запросы в PostgreSQL, и они возвращают нужные мне строки:

select * from property where name like '%\_%'; -- should return: max_width

select * from property where name like '%\%%'; -- should return: taxrate%

К сожалению, это не работает в Oracle 12c. Есть ли «стандартный» способ избежать подстановочных знаков? Или хотя бы то, что работает в Oracle?

1 Ответ

0 голосов
/ 27 июня 2018

Вы можете использовать синтаксис escape

Вы можете включить фактические символы % или _ в шаблон, используя предложение ESCAPE, которое идентифицирует escape-символ. Если escape-символ предшествует символу % или _ в шаблоне, то Oracle интерпретирует этот символ буквально в шаблоне, а не как специальный символ сопоставления с шаблоном.

Так что вы можете сделать:

select * from property where name like '%\_%' escape '\';

NAME                 VALUE                                             
-------------------- --------------------------------------------------
max_width            90                                                

select * from property where name like '%\%%' escape '\';

NAME                 VALUE                                             
-------------------- --------------------------------------------------
taxrate%             5.20                                              
...