Napisałem poniższe zapytanie SQL z LIKE
warunkiem:
SELECT * FROM Manager
WHERE managerid LIKE '_%'
AND managername LIKE '%_%'
W polu LIKE
Chcę wyszukać podkreślenia %_%
, ale wiem, że dane moich kolumn nie zawierają znaków podkreślenia.
- Dlaczego zapytanie dostarcza mi wszystkie rekordy z tabeli?
Przykładowe dane:
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
NIEŚMIERTELNY
źródło
źródło
Odpowiedzi:
Zmodyfikuj swój
WHERE
stan w ten sposób:Jest to jeden ze sposobów, w jaki Oracle obsługuje znaki ucieczki. Tutaj definiujesz znak ucieczki za pomocą
escape
słowa kluczowego. Aby uzyskać szczegółowe informacje, zobacz ten link w Oracle Docs .Znaki
'_'
i'%'
są znakami wieloznacznymi wLIKE
instrukcji operowanej w języku SQL._
Postać wygląda na obecności (dowolnym) jednego znaku. Jeśli szukać wedługcolumnName LIKE '_abc'
, da Ci prowadzić z wierszy konieczności'aabc'
,'xabc'
,'1abc'
,'#abc'
ale NIE'abc'
,'abcc'
,'xabcd'
i tak dalej.'%'
Znak jest używany do dopasowania 0 lub więcej liczbę znaków. Oznacza to, że jeśli szukać wedługcolumnName LIKE '%abc'
, da Ci prowadzić z konieczności'abc'
,'aabc'
,'xyzabc'
i tak dalej, ale nie'xyzabcd'
,'xabcdd'
i każdy inny ciąg, który nie kończy się'abc'
.W twoim przypadku szukałeś przez
'%_%'
. Dzięki temu wszystkie wiersze z tą kolumną będą miały jeden lub więcej znaków, czyli dowolne znaki, jako wartość. Dlatego otrzymujesz wszystkie wiersze, mimo że nie ma ich_
w wartościach kolumn.źródło
like
operatora. Moje rozwiązanie będzie działać w większości, jeśli nie we wszystkich, bazach danych.Podkreślenie to symbol wieloznaczny w
LIKE
zapytaniu dotyczącym jednego dowolnego znaku.Stąd
LIKE %_%
oznacza „podaj mi wszystkie rekordy z co najmniej jednym dowolnym znakiem w tej kolumnie”.Musisz uciec od symbolu wieloznacznego, w sql-server z
[]
około:Zobacz: LIKE (Transact-SQL)
Demo
źródło
sql-server
tag w swoim pytaniu, a ich warunkiem SQLFiddle jest również oznaczona jako MS SQL Server 2008.Ponieważ chcesz konkretnie wyszukać znak wieloznaczny, musisz tego uniknąć
Odbywa się to poprzez dodanie
ESCAPE
klauzuli doLIKE
wyrażenia. Znak określony wESCAPE
klauzuli „unieważni” następujący znak wieloznaczny.Możesz użyć dowolnego znaku (ale nie znaku wieloznacznego). Większość ludzi używa
\
znaku, ponieważ tego używa również wiele języków programowaniaTwoje zapytanie spowodowałoby:
Ale równie dobrze możesz użyć dowolnej innej postaci:
Oto przykład SQLFiddle: http://sqlfiddle.com/#!6/63e88/4
źródło
Podkreślenie to symbol wieloznaczny. na przykład „A_%” będzie szukać wszystkich dopasowań rozpoczynających się od „A” i będzie zawierać co najmniej 1 dodatkowy znak po tym
źródło
Możesz napisać zapytanie jak poniżej:
to rozwiąże twój problem.
źródło
Jeśli ludzie szukają informacji, jak to zrobić w BigQuery:
Podkreślenie „_” oznacza pojedynczy znak lub bajt.
Możesz zmienić znaczenie znaków „\”, „_” lub „%” za pomocą dwóch odwrotnych ukośników. Na przykład, "\%". Jeśli używasz nieprzetworzonych ciągów, wymagany jest tylko jeden lewy ukośnik. Na przykład r "\%".
Źródło: https://cloud.google.com/bigquery/docs/reference/standard-sql/operators
źródło