SQL abfrage

whaaw

Neuer Benutzer
Beiträge
4
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?
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.160
durch einen fehler in der webapplikation wurde bei den einzelnen einträgen der TIMSTAMP nicht eingetragen


geht das überhaupt und wen ja wie?


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?
 

whaaw

Neuer Benutzer
Beiträge
4
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^^
 

akretschmer

Datenbank-Guru
Beiträge
9.160
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'

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.

hab aber echt keine ahnung ob da meine logik stimmt^^
und ja PostgreSQL sagt mir gar nichts^^

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

whaaw

Neuer Benutzer
Beiträge
4
Du kannst vorsorglich prüfen, ob die Timestamp-Spalte NULL ist, um nicht bereits korrekt eingetragene Werte runterzuspülen.

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
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.409
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.
 
Oben