Jörg: Teile einer Spalte in mysql löschen / Update mit regex

Hallo,

ich habe in einer (Text)-Spalte imm er wieder mal einen gleich lautenden String, gefolgt von weiteren Zeichen.

Z.B. ABC 12345, ABC tset2345, ABC 10, usw.

Manche Zeilen enthalten auch nur anderweitigen Text, ganz ohne diese Zeichenfolge.

Wie kann ich das Leerzeichen vor, sowie den Text hinter und inkl. dem ABC aus der Spalte löschen?

Mein Problem ist weniger das ABC selber, aber mit der nötigen Regex hapert es an dieser Stelle.

Jörg

  1. 1.)

    SELECT SUBSTRING_INDEX('www.mytestpage.info','.',2) as RET;
    

    Gibt zurück:

    +----------------+
    | RET            |
    +----------------+
    | www.mytestpage |
    +----------------+
    1 row in set (0.000 sec)
    
    2.)
    
    Das willst Du aber nicht, Du willst wahrscheinlich den zweiten Teil:
    
    ~~~sql
    SELECT SUBSTRING_INDEX('www.mytestpage.info','.',-2) as RET;
    

    Gibt zurück:

    +-----------------+
    | RET             |
    +-----------------+
    | mytestpage.info |
    +-----------------+
    1 row in set (0.000 sec)
    
    

    3.) Was passiert, wenn der Trenner nicht vorhanden ist?

    SELECT SUBSTRING_INDEX('www.mytestpage.info',' ',-2) as RET;
    
    +---------------------+
    | RET                 |
    +---------------------+
    | www.mytestpage.info |
    +---------------------+
    1 row in set (0.000 sec)
    

    Das ist also der ganze String.

    4.) Testen wir mit Deinem Zeug:

    SELECT SUBSTRING_INDEX('ABC 123',' ',1) as RET1, SUBSTRING_INDEX('ABC 123',' ',-1) as RET2;
    

    liefert:

    +------+------+
    | RET1 | RET2 |
    +------+------+
    | ABC  | 123  |
    +------+------+
    1 row in set (0.000 sec)
    

    und, wenn es den Delimiter nicht gibt:

    SELECT SUBSTRING_INDEX('ABC123',' ',1) as RET1, SUBSTRING_INDEX('ABC123',' ',-1) as RET2;
    

    kommt halt das hier:

    +--------+--------+
    | RET1   | RET2   |
    +--------+--------+
    | ABC123 | ABC123 |
    +--------+--------+
    
    1. Da Du von einem „immer gleich lautendem String„ schreibst ist ein Regex zu „teuer“, denn eine einfache Textfunktion sollte dann reichen.

      Deine Frage: „Wie kann ich das Leerzeichen vor, sowie den Text hinter und inkl. dem ABC aus der Spalte löschen?“ ist verwirrend. Da käme nämlich "" (ein leerer String) heraus. Deshalb die Beispiele.

      1. Hallo,

        Da käme nämlich "" (ein leerer String) heraus. Deshalb die Beispiele.

        Warum Konjunktiv? Warum die Beispiele?
        Eine einfache Funktion, die einen leeren String zurückgibt reicht doch aus…

        Gruß
        Kalk

        1. Tach!

          Eine einfache Funktion, die einen leeren String zurückgibt reicht doch aus…

          So hatte ich auch erst verstanden, was der OP schrieb. Aber anscheinend zählt zu "Text" nur der Teil bis ausschließlich der Ziffern. Also ^[a-zA-Z ] oder ^[[:alpha:] ].

          dedlfix.

        2. Warum Konjunktiv? Warum die Beispiele?

          Man sollte die Glaskugel auch mal drehen. Insbesondere wenn man gar nicht so abschließend genau weiß, was der Fragende erfahren will.

          Eine einfache Funktion, die einen leeren String zurückgibt reicht doch aus…

          Nana. Das mag zwar „Humor“ sein, aber der hätte dem Namensvetter, der leicht ersichtlich etwas anderes wollte, nicht weiter geholfen. Außerdem verstehe ich mich als „Trainer“ und zeige gern wie man es besser machen könnte…

          1. Hallo,

            Das mag zwar „Humor“ sein,

            Ja, sorry. Hab vergessen das entsprechende tag zu setzen. Habs nachgeholt.

            Gruß
            Kalk

      2. Deine Frage: „Wie kann ich das Leerzeichen vor, sowie den Text hinter und inkl. dem ABC aus der Spalte löschen?“ ist verwirrend. Da käme nämlich "" (ein leerer String) heraus. Deshalb die Beispiele.

        Du hast es glücklicherweise aber schon so verstanden, dass es hier um zusätzlichen Text ging, den ich jeweils in einenj Leerstring verwandeln und die Spalte so updaten wollte. 😉

        Hat jedenfalls alles so funktioniert, wie ich wollte, danke nochmal.

        Jörg

    2. Hallo Raketenfreund,

      danke für Deine hilfreichen Erklärungen.

      Edit, weil noch nicht ganz wach :D ;)

      Jörg