Wildcard bei UPDATE bzw. REPLACE? Syntax?

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

  • Wildcard bei UPDATE bzw. REPLACE? Syntax?

    Hallo!

    Ich habe eine Tabelle mit der Spalte "datum", darin ist das Datum immer wie folgt formattiert:

    TT.MM.JJ also z.B. 03.08.03

    Nun möchte ich in dieser Tabelle eine weitere Spalte "jahr" erstellen und den Inhalt von der Spalte "datum" übernehmen und dabei z.B "*.03" durch "2003" oder "*.19" durch "1999" ersetzen.

    Dazu habe ich folgenden query:

    PHP-Code:
    mysql_query("ALTER TABLE $tabelle ADD jahr int(4) NOT NULL");
    mysql_query("UPDATE $tabelle SET jahr = REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(datum, '%.99', '1999'), '%.00', '2000'), '%.01', '2001'),
                                '%.02', '2002'), '%.03', '2003')"
    ); 

    Das funktioniert aber nicht!
    Ich habe in der Spalte Jahr dann etwas falsches stehen.

    Meine Frage ist nun, wie die Platzhalter bei einem Replace anzugeben sind?

    Danke Euch!

    Jogi

  • #2
    warum nimmst du nicht einfach ne spalte vom typ date oder datetime?
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      weil das ganze in diesem fomat händisch eingepflegt wurde und es sich um viele tausend einträge handelt, als neue spalte könnte ich mir auch gut den TYP DATE vorstellen, nur wie bekomme ich die daten aus der alten spalte in die neue???

      Kommentar


      • #4
        Code:
        ALTER TABLE tabelle
          ADD datum2 date
        
        UPDATE tabelle
          SET
            datum2=CONCAT ( RIGHT(datum,2), '-', MID(datum,4,2), '-', LEFT(datum,2) )
        
        ALTER TABLE tabelle
          DROP COLUMN datum
        
        ALTER TABLE tabelle
          CHANGE datum2 datum DATE
        EDIT:
        wichtig: nach schritt 2 nachschauen ob die daten in der neuen spalte so sind wie gewünscht
        Zuletzt geändert von mrhappiness; 02.09.2003, 14:17.
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          SQL-Problem

          *VERSCHIEB*

          Kommentar


          • #6
            danke mrhappiness!!
            das funktioniert soweit, wenn ich die Teilbereiche nacheinander in phpmyadmin ausführe.
            Nur alles in einer php-Datein geht nicht, vermutlich, weil die erste Aktion noch läuft, wenn die zeite schon aufgerufen wird.
            Gibt`s da eine Möglichkeit, wie z.B. TIMEOUT?

            Danke!

            Jogi

            Kommentar


            • #7
              sollte auch mit php gehen, einfach jedes statement als seperates mysql_query absetzen

              kann dein problem nich so ganz nachvollziehen

              vor allem: du hast es doch schon in phpmyadmin gemacht oder?
              Ich denke, also bin ich. - Einige sind trotzdem...

              Kommentar


              • #8
                mein Problem besteht darin, dass ich diese Tabelle oft updaten muss und dann eben jedesmal diese queries ausführen muss.
                Ich möchte das in eine PHP-Datein integrieren, die diese Aktionen bei Aufruf ausführt und eine Erfolgsmeldung ausgiebt.

                Mein Script:

                PHP-Code:
                mysql_query("ALTER TABLE $tabelleADD datum2 DATE");
                mysql_query("UPDATE $tabelle SET datum2 = CONCAT ( RIGHT(datum,2),'-', MID(datum,4,2), '-', LEFT(datum,2) )");
                mysql_query("ALTER TABLE $tabelle DROP COLUMN datum");
                mysql_query("ALTER TABLE $tabelle CHANGE datum2 datum DATE");
                echo 
                "...<br>"
                echo 
                "Aktuallisierung der Spalte Datum war erfolgreich!"
                Wie gesagt, einzeln in phpmyadmin funktioniert es, nur über die Datei habe ich dann in allen Felder "NULL".

                Wo dran kann das liegen?

                Danke!

                Kommentar


                • #9
                  so sollte es heißen:

                  PHP-Code:
                  mysql_query("ALTER TABLE $tabelle ADD datum2 DATE");
                  mysql_query("UPDATE $tabelle SET datum2 = CONCAT ( RIGHT(datum,2),'-', MID(datum,4,2), '-', LEFT(datum,2) )");
                  mysql_query("ALTER TABLE $tabelle DROP COLUMN datum");
                  mysql_query("ALTER TABLE $tabelle CHANGE datum2 datum DATE");
                  echo 
                  "...<br>"
                  echo 
                  "Aktuallisierung der Spalte Datum war erfolgreich!"

                  Kommentar


                  • #10
                    Original geschrieben von JogiWebster
                    mein Problem besteht darin, dass ich diese Tabelle oft updaten muss und dann eben jedesmal diese queries ausführen muss.
                    falsch

                    du hast jetzt einmalig die daten in ein vernünftiges format gebracht

                    neue daten sollten gleich im richtigen format reingeschrieben werden
                    Ich denke, also bin ich. - Einige sind trotzdem...

                    Kommentar


                    • #11
                      klar, das würde ich auch gerne, nur bekomme ich immer wieder eine csv Tabelle, die im ursprünglichen Sinn formatiert ist, deshalb komme ich nicht drumherum dann ein Backup der ursprünglichen Tabelle vorzuhalten, dann die neuen Daten einzuspielen und dann die Spalten zu aktualisieren...

                      Gibt es in PHP denn keine Funktion wie "set timeout()" in Javascript?

                      Danke!

                      Kommentar


                      • #12
                        würde dir nix bringen

                        inhalt der spalte datum: 11.08.03

                        wird umgewandelt zu: 2003-08-11

                        nächstes update:
                        2003-08-11 wird umgewandelt zu 1911-3--20
                        kein güliges datum => 0

                        du musst dafür sorgen, dass de rinhalt der csv datei richtig is, oder du musst dir ne routine zum import schreiben, die die daten so formatiert
                        Ich denke, also bin ich. - Einige sind trotzdem...

                        Kommentar


                        • #13
                          ich dachte mir das so:

                          ich behalte die Tabellenstruktur wie gehabt, dass heißt "datum" ist kein DATE, sonder VARCHAR.
                          Diese Struktur behalte ich im Backup und spiele dort die neuen Daten ein und dann mache ich die Prozedur, die DU mir gezeigt hast, eben mit UPDATE...

                          Nur läuft warum funktioniert der gleiche BEfehl bei phpmyadmin und in einer PHP-Datei nicht?
                          Vorm Test habe ich natürlich wieder den alten Zustand der TAbelle wiederhergestellt.

                          Gibt`s den einen Timeout Befehl für PHP4?

                          Danke Dir!!

                          Kommentar


                          • #14
                            ok, hat sich erledigt!
                            ich dummerchen kann ja einfach slebst die CSV bzw die XLS entsprechend den DATE Format formatieren und dann erst einlesen...
                            hast schon recht, das andere wären keine sauberen Lösungen gewesen!

                            danke Dir!

                            Kommentar

                            Lädt...
                            X