SQL Abfrage
jb 20.01.2009 - 13:28 1036 6
jb
Here to stay
|
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?
Bearbeitet von jb am 21.01.2009, 08:03
|
Nico
former person of interest
|
spalteninhalt (jahr) "freistellen" und vergleichen?
|
Spikx
My Little Pwny
|
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;
Bearbeitet von Spikx am 20.01.2009, 13:39
|
jb
Here to stay
|
Jetzt hab ich's: DELETE FROM tabelle WHERE SUBSTRING_INDEX(datum, '.', '-1') = (DATE_FORMAT(NOW(), '%Y')-1);
|
Nico
former person of interest
|
yeah
|
fatmike182
Agnotologe
|
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
Here to stay
|
@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.
|