Ich habe die folgende SQL-Abfrage mit einer LIKE
Bedingung geschrieben:
SELECT * FROM Manager
WHERE managerid LIKE '_%'
AND managername LIKE '%_%'
In den LIKE
möchte ich für alle Unterstrichen suchen %_%
, aber ich weiß , dass meine Spalten Daten keine Streichungszeichen hat.
- Warum gibt mir die Abfrage alle Datensätze aus der Tabelle?
Beispieldaten:
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
UNSTERBLICH
quelle
quelle
Antworten:
Ändern Sie Ihren
WHERE
Zustand wie folgt :Dies ist eine der Möglichkeiten, mit denen Oracle Escape-Zeichen unterstützt. Hier definieren Sie das Escape-Zeichen mit dem
escape
Schlüsselwort. Weitere Informationen finden Sie unter diesem Link in Oracle Docs .Die
'_'
und'%'
sind Platzhalter in einerLIKE
operierten Anweisung in SQL.Der
_
Charakter sucht nach einer Präsenz von (einem) einzelnen Charakter. Wenn Sie mit dem suchencolumnName LIKE '_abc'
, wird es Sie führen gibt mit den Zeilen mit'aabc'
,'xabc'
,'1abc'
,'#abc'
aber nicht'abc'
,'abcc'
,'xabcd'
und so weiter.Das
'%'
Zeichen wird verwendet, um 0 oder mehr Zeichen zuzuordnen. Das heißt, wenn Sie suchencolumnName LIKE '%abc'
, wird es Ihnen mit, die zur Folge haben'abc'
,'aabc'
,'xyzabc'
und so weiter, aber nicht'xyzabcd'
,'xabcdd'
und andere Zeichenfolge , die mit nicht zu Ende'abc'
.In Ihrem Fall haben Sie gesucht
'%_%'
. Dadurch werden alle Zeilen mit dieser Spalte mit einem oder mehreren Zeichen, dh beliebigen Zeichen, als Wert angegeben. Aus diesem Grund erhalten Sie alle Zeilen, obwohl_
Ihre Spaltenwerte keine enthalten .quelle
like
Betreiber unterstützt . Meine Lösung funktioniert in den meisten, wenn nicht allen Datenbanken.Der Unterstrich ist der Platzhalter in einer
LIKE
Abfrage für ein beliebiges Zeichen.Bedeutet daher
LIKE %_%
"gib mir alle Datensätze mit mindestens einem beliebigen Zeichen in dieser Spalte".Sie müssen das Platzhalterzeichen in SQL-Server mit
[]
etwa umgehen :Siehe: LIKE (Transact-SQL)
Demo
quelle
sql-server
Tag in seiner Frage angegeben hat und die bereitgestellte SQLFiddle auch als MS SQL Server 2008 bezeichnet wird.Wenn Sie gezielt nach einem Platzhalterzeichen suchen möchten, müssen Sie dem entkommen
Dies erfolgt durch Hinzufügen der
ESCAPE
Klausel zu IhremLIKE
Ausdruck. Das mit derESCAPE
Klausel angegebene Zeichen macht das folgende Platzhalterzeichen "ungültig".Sie können ein beliebiges Zeichen verwenden (nur kein Platzhalterzeichen). Die meisten Leute benutzen a,
\
weil das auch viele Programmiersprachen benutzenIhre Anfrage würde also ergeben:
Sie können aber auch jeden anderen Charakter verwenden:
Hier ist ein SQLFiddle-Beispiel: http://sqlfiddle.com/#!6/63e88/4
quelle
Unterstrich ist ein Platzhalter für etwas. Zum Beispiel sucht 'A_%' nach allen Übereinstimmungen, die mit 'A' beginnen und danach mindestens 1 zusätzliches Zeichen haben
quelle
Sie können die Abfrage wie folgt schreiben:
es wird dein Problem lösen.
quelle
Falls Leute suchen, wie es in BigQuery geht:
Ein Unterstrich "_" entspricht einem einzelnen Zeichen oder Byte.
Sie können "\", "_" oder "%" mit zwei Backslashes maskieren. Zum Beispiel, "\%". Wenn Sie rohe Zeichenfolgen verwenden, ist nur ein einziger Backslash erforderlich. Zum Beispiel r "\%".
Quelle: https://cloud.google.com/bigquery/docs/reference/standard-sql/operators
quelle