Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Warum erhalte ich bei Verwendung eines Unterstrichs in einem LIKE-Filter alle Ergebnisse?

Ändern Sie Ihr WHERE Bedingung wie folgt:

WHERE mycolumn LIKE '%\_%' ESCAPE '\'

Dies ist eine der Möglichkeiten, auf die Oracle Escape-Zeichen unterstützt. Hier definieren Sie das Fluchtzeichen mit dem escape Stichwort. Einzelheiten finden Sie unter diesem Link auf Oracle Docs.

Der '_' und '%' sind Platzhalter in einem LIKE betriebene Anweisung in SQL.

Der _ character sucht nach dem Vorhandensein eines (beliebigen) einzelnen Zeichens. Wenn Sie nach columnName LIKE '_abc' suchen , erhalten Sie ein Ergebnis mit Zeilen mit 'aabc' , 'xabc' , '1abc' , '#abc' aber NICHT 'abc' , 'abcc' , 'xabcd' und so weiter.

Der '%' Zeichen wird verwendet, um 0 oder mehr Zeichen abzugleichen. Das heißt, wenn Sie nach columnName LIKE '%abc' suchen , es wird Ihnen ein Ergebnis mit 'abc' geben , 'aabc' , 'xyzabc' und so weiter, aber kein 'xyzabcd' , 'xabcdd' und jede andere Zeichenfolge, die nicht mit 'abc' endet .

In Ihrem Fall haben Sie nach '%_%' 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 kein _ vorhanden ist in Ihren Spaltenwerten.