Inhalte einer Spalte verändern

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Inhalte einer Spalte verändern

    Moin moin!

    Bei diversen Einträgen einer Spalte wurden mal die führende Nullen vergessen.
    Ich habe nun versucht diese im nachhinein zu ergänzen und zwar so:

    UPDATE t_devices
    SET d_msn = CONCAT('0',d_msn)
    WHERE left(d_msn,3) = '200'

    in meinem Beispiel sieht das dann so aus

    ist Zustand:
    20012345
    20012346
    20012347

    soll:
    020012345
    020012346
    020012347

    Ergebnis:
    020012345
    020012345020012346
    020012345020012346020012347

    D.h. die Ergänzung mit der '0' funktioniert und auch die Einschränkung mit '200' tut wie sie soll, allerdings ist es mir schleierhaft, warum der Inhalt der vorherigen Felder mitgeschleppt wird

    Somit die Frage wie man das verhindert oder ob es eine elegantere Methode gibt das 0-Problem zu lösen.

  • #2
    Wieso speicherst du Zahlen als Strings? Wähle den passenden Datentyp (int) und formatiere die Zahlen bei der Ausgabe.

    Kommentar


    • #3
      Die Idee ist zwar nicht ganz falsch, allerdings gibt es auch weitaus längere Nummern und ab und zu mal alphanumerische Zeichen.

      z.B.: 10000000100223346
      oder 010023-18G

      somit bleibt nur string als Format übrig

      Kommentar


      • #4
        Tja okay, wenn ZEROFILL und BINARY ggf. in Kombination mit Spaltentyp CHAR nicht helfen, würde ich das als Bug bezeichnen, denn UPDATE ... SET x = x+1 WHERE x < 100 funktioniert ja auch so, daß x um 1 erhöht wird und zwar nur einmal, nicht etwa so lange bis x >= 100.

        Kommentar


        • #5
          Hat denn vielleicht doch noch jemand mal eine Idee ?

          Ich bin doch mit Sicherheit nicht der Erste der mal ein paar vorhandene Daten verändern möchte

          Kommentar


          • #6
            ich habe eben über phpmyadmit mit Mysql 5.0.21 experementiert und es hat einwandfrei funktioniert.

            update table1 set a=concat("0",a) where left(a,3)="200"

            welche Version hast du eigentlich?
            Slava
            bituniverse.com

            Kommentar


            • #7
              Hi Slava !

              Bei mir läuft das hier -> Verbunden mit MySQL 4.1.9-max auf localhost

              Ich hatte schon den dunklen Verdacht das das mehr ein undocumented Feature als ein normales Verhalten ist.

              Bleibt die Frage wie man das ganze über einen anderen Weg doch noch hin bekommt

              Kommentar


              • #8
                Versuchs über einen Umweg: Erzeuge eine neue Tabelle und fülle sie mit

                SELECT CONCAT('0',d_msn) FROM t_devices WHERE left(d_msn,3) = '200'

                Wenn die Werte okay sind, spielst du sie in die Ursprungstabelle zurück.

                Kommentar


                • #9
                  so, da isser wieder; sorry für die pause, aber Urlaub muss auch mal sein

                  Danke für den Vorschlag, das Ganze sieht dann so aus:

                  INSERT INTO t_devices_temp ( dt_device_id, dt_msn)
                  SELECT d_device_id, CONCAT('0', d_msn) FROM t_devices WHERE left(d_msn,3) = '200'

                  Ergebnis:

                  45 20012345
                  46 20012346
                  50 20012347

                  d.h. WHERE sucht zwar die richtigen Zeilen heraus, das CONCAT wird aber ignoriert (die device_Id ist allerdings richtig)

                  Kommentar

                  Lädt...
                  X