Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

SQL abfrage

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von whaaw, 30 August 2013.

  1. whaaw

    whaaw Neuer Benutzer

    Guten Tag zusammen.

    Ich Brauche eure Hilfe bei einer sql aufgabe für meine datenbank.

    Ich habe eine Tabelle wo Statusnachrichten von unserem service personal eingetragen werden.
    durch einen fehler in der webapplikation wurde bei den einzelnen einträgen der TIMSTAMP nicht eingetragen

    die Service leute haben daraufhin das datum in den Titel reingeschrieben damit ich sie rausfiltern kann.

    ich habe mir nun eine abfrge gebastelt die mir alle meldungen anzeigt an einem bestimmten tag.

    die sieht zur zeit so aus:
    Code:
    SELECT * FROM `iq_cover_status_message` WHERE `cover_status_message_subject` = 'Service 2013 210813'
    dies bringt mir alle meldungen die am 21.08.13 eingetragen wurden.
    ich würde gerne diese abfrage so erweitern das er nun automatisch in der spalte `cover_status_message_created` das richtige datum einträgt.

    geht das überhaupt und wen ja wie?
     
  2. akretschmer

    akretschmer Datenbank-Guru


    geht schon, als erster Ansatz:

    Code:
    test=*# select * from whaaw ;
     id | ts |  message
    ----+----+---------------------
      1 |  | Service 2013 210813
      2 |  | Service 2013 210814
      3 |  | Service 2013 210815
    (3 rows)
    
    test=*# update whaaw set ts = to_timestamp(substring(message,14,20),'ddmmyy');
    UPDATE 3
    test=*# select * from whaaw ;
     id |  ts  |  message
    ----+---------------------+---------------------
      1 | 2013-08-21 00:00:00 | Service 2013 210813
      2 | 2014-08-21 00:00:00 | Service 2013 210814
      3 | 2015-08-21 00:00:00 | Service 2013 210815
    (3 rows)
    
    Das ist jetzt aber mit PostgreSQL gemacht, ähnlich könnte es in MySQL gehen.
    Das Problem wird aber sein, daß da die Eingaben ganz sicher nicht imer korrekt und in immer derselben Position und Format sein werden. Da wären dann reguläre Ausdrücke praktisch.


    Warum hast Du nicht eingestellt, daß das Feld automatisch durch die DB gefült wird?
     
  3. whaaw

    whaaw Neuer Benutzer

    Danke für die rasche Antwort.

    Die Datenbank war einfach falsch konfiguriert. Nun habe ich das so eingestellt das der Timstamp automatisch von der DB eingetragen wird.
    Funktioniert auch wunderbar.

    ich sitze jezt trotzdem auf hunderten datensätze ohne timstamp. der titel ist immer der selbe "Service 2013 220813" oder "Service2013 270813" also sehr gut filterbar.
    ich hab mir das so vorgestellt
    Code:
    SELECT * FROM `iq_cover_status_message` WHERE `cover_status_message_subject` = 'Service 2013 210813'
    (und jezt irgendwie) UPDATE `cover_status_message_created` = '21-08-2013'
    hab aber echt keine ahnung ob da meine logik stimmt^^
    und ja PostgreSQL sagt mir gar nichts^^
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Du brauchst kein extra Select, das verschlimmbessert vermutlich nur das Problem. Schau Dir an, was ich gemacht habe, so sollte es auch unter MySQL gehen. Du kannst vorsorglich prüfen, ob die Timestamp-Spalte NULL ist, um nicht bereits korrekt eingetragene Werte runterzuspülen.

    Nun ja, nun hast Du es also erstmalig gehört.
     
  5. whaaw

    whaaw Neuer Benutzer

    Das könnte ich natürlich, wenn ich nicht heute morgen in der tabellenstruktur das häcken bei NULL rausgenommen hätte. ^^ somit hats mir alle "Nuller" mit dem heutigen datum aufgefüllt :)))))

    dan werd ich mal gucken wie ich deine abfrage in mysql umwandle,

    danke nochmal
     
  6. ukulele

    ukulele Datenbank-Guru

    Dann solltest du zumindest nur Datensätze mit dem Timestamp von heute updaten.
     
  7. whaaw

    whaaw Neuer Benutzer

    naja es gibt aber auch einträge die von heute sind und auch bleiben sollen

    also kriterium sollte der Titel (`cover_status_message_subject`) sein, da erkenne ich wann der eintrag erstellt wurde
     
  8. ukulele

    ukulele Datenbank-Guru

    Auch die gilt es auszuschließen. Am besten du baust erst einen Select der im WHERE Teil alle Kriterien enthält (Timestamp von heute, Datumsformat Service2013 270813, gültiges Jahr, gültiges Datum) und wenn der fehlerfrei läuft nimmst du den kompletten WHERE Teil in dein Update Statement rein.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden