Я написал приведенный ниже SQL-запрос с LIKE
условием:
SELECT * FROM Manager
WHERE managerid LIKE '_%'
AND managername LIKE '%_%'
В поле LIKE
я хочу найти любые %_%
символы подчеркивания , но знаю, что в данных моих столбцов нет символов подчеркивания.
- Почему запрос дает мне все записи из таблицы?
Образец данных:
create table Manager(
id int
,managerid varchar(3)
,managername varchar(50)
);
insert into Manager(id,managerid,managername)values(1,'A1','Mangesh');
insert into Manager(id,managerid,managername)values(2,'A2','Sagar');
insert into Manager(id,managerid,managername)values(3,'C3','Ahmad');
insert into Manager(id,managerid,managername)values(4,'A4','Mango');
insert into Manager(id,managerid,managername)values(5,'B5','Sandesh');
sql
sql-server
Бессмертный
источник
источник
Ответы:
Измените свое
WHERE
состояние следующим образом:Это один из способов, которыми Oracle поддерживает escape-символы. Здесь вы определяете escape-символ с
escape
ключевым словом. Подробнее см. По этой ссылке в Oracle Docs .Символы
'_'
и'%'
являются символами подстановки вLIKE
операторе SQL._
Персонаж ищет присутствие (любой) одного символа. Если поиск поcolumnName LIKE '_abc'
, это даст вам результат с строки , имеющие'aabc'
,'xabc'
,'1abc'
,'#abc'
но НЕ'abc'
,'abcc'
,'xabcd'
и так далее.Символ
'%'
используется для сопоставления 0 или более символов. Это означает, что если вы будете искать поcolumnName LIKE '%abc'
, это даст вам результат с наличием'abc'
,'aabc'
,'xyzabc'
и так далее, но нет'xyzabcd'
,'xabcdd'
и любая другая строка , которая не заканчивается'abc'
.В вашем случае вы искали
'%_%'
. Это даст всем строкам с этим столбцом один или несколько символов, то есть любые символы, в качестве его значения. Вот почему вы получаете все строки, даже если_
в вашем столбце нет значений.источник
like
оператора. Мое решение будет работать в большинстве, если не во всех, базах данных.Подчеркивание - это подстановочный знак в
LIKE
запросе для одного произвольного символа.Следовательно,
LIKE %_%
означает «дать мне все записи хотя бы с одним произвольным символом в этом столбце».Вам нужно избежать подстановочного символа в sql-server с
[]
примерно:См .: LIKE (Transact-SQL)
Demo
источник
sql-server
тег в своем вопросе, а предоставленный им SQLFiddle также обозначен как MS SQL Server 2008.Поскольку вы хотите специально искать подстановочный знак, вам нужно избежать этого
Это делается путем добавления
ESCAPE
предложения к вашемуLIKE
выражению. Символ, указанный вESCAPE
предложении, «сделает недействительным» следующий подстановочный знак.Вы можете использовать любой понравившийся символ (только не подстановочный знак). Большинство людей используют a,
\
потому что это то, что также используют многие языки программирования.Таким образом, ваш запрос приведет к:
Но вы также можете использовать любой другой символ:
Вот пример SQLFiddle: http://sqlfiddle.com/#!6/63e88/4
источник
Подчеркивание - это подстановочный знак для чего-то. например, 'A_%' будет искать все совпадения, которые начинаются с 'A', и после этого будет иметь минимум 1 дополнительный символ
источник
Вы можете написать запрос, как показано ниже:
это решит вашу проблему.
источник
Если люди ищут, как это сделать в BigQuery:
Знак подчеркивания «_» соответствует одному символу или байту.
Вы можете экранировать символы "\", "_" или "%" с помощью двух обратных косых черт. Например, "\%". Если вы используете необработанные строки, требуется только одна обратная косая черта. Например, r "\%".
Источник: https://cloud.google.com/bigquery/docs/reference/standard-sql/operators
источник