Michael Schröpl: mySQL und regular expressions: Auch in Update?

Hallo Leute,

ich experimentiere gerade mit dem mySQL-feature, innerhalb von WHERE-Klauseln nicht nur einfache String-Vergleiche und LIKE-Operationen, sondern richtige regular expressions einzusetzen.

Ein Beispiel:
   SELECT COUNT(*)
     FROM t_story
    WHERE d_headline REGEXP '^ +.*';

Mit LIKE könnte ich die Eigenschaft, variabel viele Leerzeichen am Anfang zu haben, schon nicht mehr ausdrücken. Und falls der regexp-Auswerter "greedy" wäre, würde er mit '.*' genau den Inhalt ab dem ersten Nicht-Leerzeichen ausdrücken. Genau dieser interessiert mich ...

Aus Perl bin ich gewohnt, daß regular expressions mir über runde Klammern erlauben, auf die gematchten Inhalte zuzugreifen.
Deshalb meine Frage: Gibt es so etwas auch in mySQL?

Ich würde nämlich gerne alle führenden Leerzeichen aus dieser Spalte entfernen (welche durch mein fehlerhaftes Import-Programm versehentlich dorthin gelangt sind und nun stören - und nein, ich habe die Import-Daten nicht mehr im Original, und es würde auch einige Tage dauern, sie nochmal durch das - inzwischen reparierte - Import-Programm zu jagen).
Klar, ich könnte dafür auch wieder ein Perl-Programm schreiben, um dieses eine Feld zu patchen - aber geht das nicht vielleicht direkt mit einem mySQL-Statement?
Falls ja, würde ich das gerne beherrschen lernen - so etwas kann ich im Moment nämlich ständig brauchen.

Im Handbuch habe ich allerdings unter UPDATE nichts Ermutigendes in dieser Hinsicht gefunden.
Ich verwende die Version 3.23.47, also nagelneu.

Viele Grüße
      Michael

  1. Moin,

    Ich würde nämlich gerne alle führenden Leerzeichen aus dieser Spalte entfernen

    Klingt als würde dir LTRIM(str) schon reichen: http://www.mysql.com/documentation/mysql/bychapter/manual_Reference.html#String_functions. Das sollte sich auch in einem UPDATE verwenden lassen.

    --
    Henryk Plötz
    Grüße von der Ostsee

    1. Hallo Henryk,

      Ich würde nämlich gerne alle führenden Leerzeichen
      aus dieser Spalte entfernen
      Klingt als würde dir LTRIM(str) schon reichen:

      Volltreffer - das ist es, was ich gesucht habe.
      (Boah, hat mySQL da viele Funktionen ...)

      Vielen Dank
             Michael

      P.S.: Der Update läuft gerade - das Ergebnis wird ein Weilchen auf sich warten lassen ... so eine halbe Stunde, schätze ich mal vorsichtig.

      1. Hallo Henryk,

        Der Update läuft gerade - das Ergebnis wird ein
        Weilchen auf sich warten lassen ... so eine halbe
        Stunde, schätze ich mal vorsichtig.

        die gute Nachricht: Alle linksstehenden Leerzeichen wurden brav aus der entsprechenden Spalte entfernt.

        Die schlechte Nachricht: Der 200-MB-Volltextindex über diese und eine weitere Spalte hat das Unternehmen (nach 49 Minuten) nicht lebend überstanden.

        Mal sehen, wie sich die Datenbank jetzt beim Neuberechnen des Indexbaums anstellt ...

        Viele Grüße
              Michael