Sven: SQL Befehl gesucht

Guten Tag,

ich möchte in einer Artikel-DB alle bei allen Artikeln, die in Spalte "Lieferant" die Nummer 12345 haben, in der Spalte "Artikelnummer" das letzte zeichen der Artikelnummer löschen, falls dieses letzte Zeichen ein Punkt ist.

Wie gehe ich das am besten an?

Gruß, Sven

  1. Mein Versuch scheitert:

    UPDATE artikel
    SET Artikelnummer = LEFT(Artikelnummer,LENGHT(Artikelnummer)-1)
    Where RIGHT(Artikelnummer,1) = '.'
    AND LieferantenID = 12345
    

    FUNCTION LENGHT existiert nicht

    1. FUNCTION LENGHT existiert nicht

      Klingt logisch

      Ich hätte für die ganze Nummer nach Mysql Replace Regex oder so geschaut, aber keine Ahnung genau.

      Notfalls: Mysqldump. Search & Replace via Regex und den Dump dann zurückspielen.

      1. Ich hätte für die ganze Nummer nach Mysql Replace Regex oder so geschaut, aber keine Ahnung genau.

        Ich nicht. Die „Stringarithmetik“ ist schlicht dü[nn|mm]er als die mächtig-gewaltige Regex-Maschine und damit schneller - was besonders dann Auswirkung hat, wenn es viele Zeilen sind...

        Wenn wir schon dabei sind:

        WHERE RIGHT(Artikelnummer,1) = '.'
        

        Das macht einen Fullscan. Sollte das a) zu lange dauern und b) oft gemacht werden, dann kann es effektiver sein, eine zusätzliche Spalte mit umgekehrtem Text vorzusehen, diese mit zu füttern und natürlich ebenfalls zu indexieren und mit

        … WHERE Artikelnummer_Reversed LIKE ".%"
        

        zu sieben. (Auch Artikelnummer_Reversed muss dann mit bearbeitet werden...)

      2. Hallo Mitleser 2.0,

        Klingt logisch

        Ungefähr 57.600.000 Ergebniss

        Au, wie peinlich. Aber die Englisch sprechende Welt hat da sowieso ihre Macken.

        • their vs there vs they're und your vs you're
        • Die unheilige Dreifaltigkeit lie, lied, lied (lügen) vs lie, lay, lain[1] (liegen) vs lay,laid,laid (legen).
        • und so weiter

        Meine persönliche Nemesis ist ja heigth

        Rolf

        --
        sumpsi - posui - obstruxi

        1. es gibt Varianten: laid statt lay, lien statt lain... Die Progressive Form lying gilt gemeinerweise für beide. I am lying about lying in my bed… ↩︎

    2. LENGHT → LENGTH

      1. LENGHT → LENGTH

        Ok, danke. 👍
        Jetzt läufts.

        Sven

        1. Mach Dir nichts draus. Das menschliche Hirn spekuliert: Man liest deshalb, was man schreiben wollte. Nicht was man vertippt hat. Eine andere Person sieht das sofort.

          1. Mach Dir nichts draus. Das menschliche Hirn spekuliert: Man liest deshalb, was man schreiben wollte. Nicht was man vertippt hat. Eine andere Person sieht das sofort.

            Ich habe da wirkliche Probleme.
            Length, Heigth, usw....
            Warum kann mysql nicht einfach LEN verwenden?
            Egal... danke für Deine/Eure Adleraugen. 👍😉

    3. Hallo

      Mein Versuch scheitert:

      UPDATE artikel
      SET Artikelnummer = LEFT(Artikelnummer,LENGHT(Artikelnummer)-1)
      Where RIGHT(Artikelnummer,1) = '.'
      AND LieferantenID = 12345
      

      FUNCTION LENGHT existiert nicht

      Welche MySQL-Version betreibst du? Die Funktion LENGTH ist Teil des MySQL-Sprachumfangs. Welchen Datentyp hat die Spalte mit der Artikelnummer?

      [edit]: Mal abgesehen von deinem Typo (was meine Frage nach dem Datentyp obsolet macht) ist zu überlegen, ob für deinen Zweck eventuell CHAR_LENGTH passender wäre. Zumindest, wenn es nicht beim zu entfernenden Punkt bleiben sollte.

      Tschö, Auge

      --
      „Habe ich mir das nur eingebildet, oder kann der kleine Hund wirklich sprechen?“ fragte Schnapper. „Er behauptet, nicht dazu imstande zu sein“ erwiderte Victor. Schnapper zögerte (…) „Nun …“ sagte er schließlich, „ich schätze, er muss es am besten wissen.“ Terry Prattchett, Voll im Bilde