Jörg: mysql string replace

Hallo,

was habe ich hier falsch verstanden?

UPDATE
mytable
SET
REPLACE (myColumn, 'searchfor', 'replacewith'),
othercolumn = 'mystring'
WHERE ID=4906

Mysql meckert und ich weiß nicht recht, warum?

Jörg

  1. Hallo Jörg,

    Mysql meckert und ich weiß nicht recht, warum?

    wenn "Mysql meckert", dann hast du ja wenigstens einen Fehlercode oder vielleicht sogar eine Klartextmeldung. Da kann man ansetzen.

    Ganz allgemein: Wenn du Hilfe zu irgendeinem Fehler willst, komm nur ja nicht auf die Idee, den Fehler zu benennen! 😉

    Live long and pros healthy,
     Martin

    --
    Fische, die bellen, beißen nicht.
    1. Hi Martin,

      Mysql meckert und ich weiß nicht recht, warum?

      wenn "Mysql meckert", dann hast du ja wenigstens einen Fehlercode oder vielleicht sogar eine Klartextmeldung. Da kann man ansetzen.

      #1064 - Fehler in der SQL-Syntax. Bitte die korrekte Syntax im Handbuch nachschlagen bei 'REPLACE (myColumn, 'searchfor', 'replacewith'), ...
      

      Jörg

      1. Hallo jörg,

        Bitte die korrekte Syntax im Handbuch nachschlagen

        Gute Idee

        bei 'REPLACE (myColumn, 'searchfor', 'replacewith')

        Keine gute Idee. Schlag nach bei UPDATE SET column=value 😉

        Rolf

        --
        sumpsi - posui - obstruxi
        1. Hallo,

          bei 'REPLACE (myColumn, 'searchfor', 'replacewith')

          Keine gute Idee. Schlag nach bei UPDATE SET column=value 😉

          Ich glaube, noch besser wärs, bei regex_replace nachzuschlagen…

          Gruß
          Kalk

          1. Hallo Tabellenkalk,

            wieso? Für eine einfache Ersetzung reicht REPLACE doch allemale. Sicher, REGEXP_REPLACE kann mehr, braucht aber auch mehr Ressourcen und setzt MySQL 8 oder Maria 10.0 voraus...

            Und deswegen crasht das Statement auch nicht.

            Rolf

            --
            sumpsi - posui - obstruxi
            1. Hallo,

              wieso?

              weil ich in meiner Oberflächlichkeit nur das REPLACE-Statement fand und nicht damit rechnete, dass es dann auch noch eine REPLACE-Funktion gibt und daher direkt nach der REGEX-Variante geschaut habe…

              Also bitte meinen Vorschlag ignorieren.

              Gruß
              Kalk

        2. Hallo Rolf,

          bei 'REPLACE (myColumn, 'searchfor', 'replacewith')

          Keine gute Idee. Schlag nach bei UPDATE SET column=value 😉

          Hast Du mal nen Link? Ich habe gefühlte 100 Seiten angeschaut und finde imme rnur Verweis auf genau das, was ich gemacht habe... Und bei den anderen scheints zu funktionieren.

          Jörg

          1. Hallo Jörg,

            finde immer nur Verweis auf genau das, was ich gemacht habe...

            Das glaube ich nicht. Jedenfalls nicht genau das.

            Und bei den anderen scheints zu funktionieren.

            Das mag sein. Aber die haben dann was anderes gemacht als Du.

            Und wie die Erfahrung zeigt, weiß ich besser als Du, was Du gemacht hast 🤣😂. Zumindest weiß ich besser, was Du gepostet hast. Ob Du das dann auch gemacht hast, das weißt Du natürlich besser.

            Leg mal die Knöpfe auf deinen Augen in die Dose zurück und vergleiche die beiden folgenden Statements:

            UPDATE table SET value WHERE dings='rums'
            
            UPDATE table SET column=value WHERE dings='bums'
            

            Nur eins davon funktioniert.

            Falls Du dem gleichen Irrtum unterliegst wie Tabellenkalk: REPLACE ist eine Funktion. Sie bekommt 3 Parameter und liefert einen neuen Wert zurück. Dein SQL guckt Dich doof an und fragt: Und was soll ich nun damit tun?

            Sorry, wenn ich Dich so lange schmoren ließ. Aber es ist viel besser, wenn man sowas selbst erkennt.

            Rolf

            --
            sumpsi - posui - obstruxi
            1. Hallo,

              UPDATE table SET value WHERE dings='rums'
              
              UPDATE table SET column=value WHERE dings='bums'
              

              Nur eins davon funktioniert.

              Ach, komm. Ob du nun nach rums oder bums suchst, darf keinen Unterschied machen. 😉

              Dein SQL guckt Dich doof an

              Warum gibt es eigentlich kein Bestreben seitens MYSQL, die Felhermeldungen zielführender zu formulieren? Oder gibt es irgendwelche Erweiterungen, die sowas leisten?

              Gruß
              Kalk

              1. Hallo Tabellenkalk,

                Warum gibt es eigentlich kein Bestreben seitens MYSQL, die Felhermeldungen zielführender zu formulieren?

                Das ist nicht nur in MySQL so. Ich habe keine Ahnung, ob der SQL Standard diesen komischen Stil der Fehlermeldungen vorschreibt. Aber tatsächlich hat mir bisher jedes SQL solche Dinge vorgefaselt, wenn ich ihm unsyntaktisches Zeugs vorgefaselt habe (MySQL, MariaDB, MS SQL Server, OS/2 DB2, z/OS DB2).

                Er parsed so lange, wie er noch was versteht, und wenn er am Ende ist, sagt er nur: Guck mal hier in der Gegend, da setzt es bei mir aus.

                Und bei Jörg hat er beim REPLACE ausgesetzt, weil er ein "," gefunden hat wo er ein "=" erwartete. Er hätte schon beim "(" aussetzen müssen, weil kein Column Name eine Klammer enthalten darf (jedenfalls nicht, ohne in Backticks gesetzt zu werden), aber offenbar bildet er seine Syntaxgruppen etwas anders.

                Rolf

                --
                sumpsi - posui - obstruxi
                1. Hallo

                  Warum gibt es eigentlich kein Bestreben seitens MYSQL, die Felhermeldungen zielführender zu formulieren?

                  Das ist nicht nur in MySQL so. Ich habe keine Ahnung, ob der SQL Standard diesen komischen Stil der Fehlermeldungen vorschreibt. Aber tatsächlich hat mir bisher jedes SQL solche Dinge vorgefaselt, wenn ich ihm unsyntaktisches Zeugs vorgefaselt habe (MySQL, MariaDB, MS SQL Server, OS/2 DB2, z/OS DB2).

                  Wollte gerade auch sagen, dass die Fehlermeldungen von MS SQL zwar auf andere Art nicht zielführend sind aber eben auch nicht zielführend. Das ist – zumindest in diesen beiden Systemen – bestenfalls Rohmaterial zur Interpretation von Orakelsprüchen.

                  In MS SQL bekommen die es ja hin, die Fehlerzeile zum Beispiel einer Prozedur nicht einmal annähernd zu benennen. Da wird erst hin und her und wegoptimiert, woraufhin die (angenommene) Zeile 156 der Prozedur mit dem Fehler in der Meldung als (wiederum angenommene) Zeile 94 angesagt wird (zusammen mit einer insgesamt kryptischen Meldung) und dann fängt man an, im Rohtext die Zeilen unter Auslassung der Kommentare und Leerzeilen zu zählen, um wenigstens in die Nähe der tatsächlichen Zeile zu gelangen, in der der Fehler auftritt. 🤬

                  Tschö, Auge

                  --
                  200 ist das neue 35.
            2. Hallo Rolf,

              Und wie die Erfahrung zeigt, weiß ich besser als Du, was Du gemacht hast 🤣😂. Zumindest weiß ich besser, was Du gepostet hast. Ob Du das dann auch gemacht hast, das weißt Du natürlich besser.

              😂

              Leg mal die Knöpfe auf deinen Augen in die Dose zurück und vergleiche die beiden folgenden Statements:

              UPDATE table SET value WHERE dings='rums'
              
              UPDATE table SET column=value WHERE dings='bums'
              

              Ja, ok. Jetzt klingelts und so sagens auch die anderen Seiten, die ich gesehen habe.

              Falls Du dem gleichen Irrtum unterliegst wie Tabellenkalk: REPLACE ist eine Funktion. Sie bekommt 3 Parameter und liefert einen neuen Wert zurück. Dein SQL guckt Dich doof an und fragt: Und was soll ich nun damit tun?

              Nicht bewußt, aber anscheinend dann doch unterbewußt...

              Sorry, wenn ich Dich so lange schmoren ließ. Aber es ist viel besser, wenn man sowas selbst erkennt.

              Kein Problem. Aber hier hatte ich tatsächlich mal sehr lange die Tomaten auf den Augen.😇

              Jörg