MySQL Befehl

G.P.

Legendäres Mitglied
Ich habe eine Tabelle in welcher WERT_1 und WERT_2 mit einem Buchstaben oder einer Zahl versehen sind.

Jetzt brauche ich einen MySQL Befehl, welcher ein Update in allen Spalten auffuehrt, in welchen WERT_1 ein Buchstabe von A-G ist und WERT_2 keine Zahl und nicht D ist.

Ich hoffe ihr könnt mir da weiterhelfen.
Alle Updatebefehle einzeln aufzuschreiben wäre doch etwas umständlich.

(Es kann nur auf den Funktionsumfang von MySQL zurückgegriffen werden)

MfG
GP
 
UPDATE tabelle
SET blabla = irgendwas
WHERE WERT_1 in ('A','B','C','D','E','F','G') and WERT_2 not in ('1','2','3','4','5','6','7','8','9','0','D')
 
Das ist schon wesentlich praktischer als meine bisherige Loesung
biggrin.gif

Danke.
 
Das wäre übrigens auch eine hübsche Gelegenheit für die "reguläre Ausdrücke"-MySQL-Erweiterung "REGEXP", synonym mit "RLIKE":

...
WHERE `wert_1` REGEXP '[a-g]' AND `wert_2` REGEXP '[^0-9d]'

Allerdings musst Du dabei beachten, dass außer bei binären Datentypen keine Unterscheidung zwischen Groß- und Kleinschreibung gibt.
 
Das ist noch besser, ich wuste gar nicht das MySQL das unterstuetzt.
Dank dir.

MfG
GP
 
QUOTE (PH @ Fr 24.10.2008, 13:17)WHERE WERT_1 in ('A','B','C','D','E','F','G') and WERT_2 not in ('1','2','3','4','5','6','7','8','9','0','D')

Solche Vergleiche sind eigentlich ein klassischer Fall für die ASCII - Funktion: Die wandelt das Zeichen in den zugeordneten Ascii / Unicode-Codepunkt um, A = 65, G = 71, 0 = 48, 9 = 57, D = 68

Also:


QUOTE Where (Ascii(Wert_1) Between 65 And 71)
And ((Ascii(Wert_2) Not Between 48 And 57) And (Ascii(Wert_2) <> 68))



Wenn das varchar-Daten sind, dann kostet die Ascii-Funktion praktisch gar keine CPU-Zeit, weil dann A = 65 ist, das sind bloß zwei verschiedene Darstellungen. Aus diesem prinzipiellen Grund müßte das schneller als jedes RegEx sein.
 
Zurück
Oben