2010-11-02 15 views

Antwort

12

Ihre erste Abfrage like Operator verwendet aber verwendet keinen Platzhalter. So ist es gleichbedeutend mit:

select id from tab where id = '000'; 

die nur listet die id ist, wo id000 ist.

Die zweite Abfrage verwendet regex Operator und Zeilen listet wo id000überall in ihm hat.

Beispiel: Es wird Liste dieses id ‚s: 1000, 2000, 000, 0001

Um Ihre erste Abfrage wie der zweite verhalten machen Sie Wild Card % verwenden werden, haben die Null entspricht oder weitere Zeichen:

select id from tab where id like '%000%'; 

um Ihre zweite Abfrage wie die Faust verhalten machen Sie Start Anker (^) und End-Anker verwenden werden müssen ($):

select id from tab where id regex '^000$'; 
+0

Um das hinzuzufügen: Es würde * Unterschiede * sein, wenn Ihre Abfragen waren ... wie '000%' und ''wie' 000_'' und' ... regex '000 [[: alnum:]] + ''und ... du wirst die Idee bekommen;) – FrustratedWithFormsDesigner

3

Nur falls Sie die erste Aussage gemeint sein:

select id from tab where id like '%000%'; 

Das bedeutet: etwas (oder nichts), gefolgt von '000', gefolgt von etwas (oder nichts) .

Dies passiert genau was id regex '000' tut.

Grundsätzlich funktioniert LIKE sehr einfache Wildcard-Übereinstimmungen und REGEX ist in der Lage, sehr komplizierte Wildcard-Übereinstimmungen zu erstellen.

In der Tat, reguläre Ausdrücke (REGEX) sind so in der Lage, dass sie [1] eine ganze Studie in sich [2] eine einfache Möglichkeit zur Einführung sehr subtile Bugs sind. Habe Spaß.

1

Der Operator wie ermöglicht die Angabe von Platzhaltern mit dem Operator %.

Wenn Sie zum Beispiel alle Wörter angeben müssen beginnend mit dem Zeichen ein, können Sie dies tun, indem Sie den Wert mit „a%“. Sie können auch die Wörter endend mit einer Zeichenfolge angeben. Z.B. Wörter mit Endung ing können Sie

mit „% ing“ angegeben werden auch Parameter haben könnte Spalten enthalten Werte angeben, die eine bestimmte Zeichenfolge enthalten. Z.B.Worte, die die Zeichen Fisch enthalten „% Fisch%“ regelmäßig werden angegebener Ausdruck geben mit dem wie Parameter

Regexp (Ich glaube nicht, dass es ein regulärer Ausdruck Operator) auf der anderen Seite ermöglicht es Ihnen, Vergleichen von Werten in einer Spalte mit einem Parameter. Wenn Sie beispielsweise alle Datensätze abrufen möchten, die einer Telefonnummer im Format 555-666-7777 entsprechen, können Sie den Parameter "[[: digit:]]] {3} \ - [[: digit:]] { 3} \ - [[: digit:]] {4} "

z SELECT * FROM Telefonbuch WHERE Telefon REGEXP "[[: digit:]] {3} \ - [[: digit:]] {3} \ - [[: digit:]] {4}"

Bitte Weitere Informationen über den Operator REGEXP finden Sie unter http://dev.mysql.com/doc/refman/5.1/en/regexp.html.