SQL Abfrage

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/sql_abfrage_203958/page_1 - zur Vollversion wechseln!


jb schrieb am 20.01.2009 um 13:28

Hallo!

Brauche eine Abfrage, die mir aus einem Feld (kein echtes Datumsfeld, sondern Varchar, also DD.MM.YYYY) die Zeilen mit dem letzten Jahr rauslöscht. Bei einem echten Datumsfeld ginge das einfach, für das Format kann ich leider nix, das ist vorgegeben. Eine Änderung würde umfangreiche Änderungen anderer Scripte und Abfragen notwendig machen, ist also nicht sinnvoll.

Also:

delete from tabelle where datum like '%2008';

Der obige Befehl haut wunderbar hin, nur müßte ich dann immer wieder das Jahr anpassen und irgendwann vergißt man es dann mal, also muß das Einfügen des Jahres automatisch gehen. Hab schon mit Konstrukten wie NOW()-1 oder YEAR()-1 usw. rumgebastelt, allerdings paßt dann irgendwie die Syntax nicht mehr.
Testweise hab ich mal nur das Jahr (2008) in die Datumsspalte geschrieben, dann kann ich die entsprechende Zeile mit

delete from tabelle where datum like '(NOW(%Y)-1)';

löschen.

Hat jemand den entscheidenden Tip, wie man das % Zeichen zusammen mit NOW(%Y)-1 anwenden kann?


Nico schrieb am 20.01.2009 um 13:33

spalteninhalt (jahr) "freistellen" und vergleichen?


Spikx schrieb am 20.01.2009 um 13:34

ich glaub du kannst

DELETE FROM tabelle WHERE YEAR(DATE(datum)) = NOW(%Y)-1

machen, weil DATE nicht unbedingt nach einem date oder datetime format verlangt, bin mir aber nicht sicher.


//edit, blödsinn... STR_TO_DATE sollte es dann schon sein

DELETE FROM tabelle WHERE YEAR(STR_TO_DATE(datum)) = NOW(%Y)-1;


jb schrieb am 20.01.2009 um 22:59

Jetzt hab ich's:
DELETE FROM tabelle WHERE SUBSTRING_INDEX(datum, '.', '-1') = (DATE_FORMAT(NOW(), '%Y')-1);


Nico schrieb am 20.01.2009 um 23:19

yeah :)


fatmike182 schrieb am 20.01.2009 um 23:29

btw: was wäre, wenn du die eine Spalte kopiert und dann geändert hättest?
Dass in der Kopie dann eben das gscheite Datumsformat steht?
dann hättest das andere Feld immer noch falls das Jahr von Belangen ist


jb schrieb am 21.01.2009 um 07:50

@fatmike182: Ich glaub ich verstehe, was du meinst, nur geht das wohl nur in einer extra Zeile (alter table?). Bevorzuge in dem Fall den Einzeiler, ansonsten ist es aber mit Zwischenschritten übersichtlicher und auch in ein paar Jahren noch leichter nachvollziehbar was man gemacht hat bzw. mit der Zeile bezweckt. Man könnte aber auch nen Kommentar setzen für das Verständnis in ein paar Jahren. :D




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025