"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

SQL Abfrage

jb 20.01.2009 - 13:28 1037 6
Posts

jb

Here to stay
Registered: May 2000
Location: /home/noe/
Posts: 3514
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
Registered: Sep 2006
Location: -
Posts: 4082
spalteninhalt (jahr) "freistellen" und vergleichen?

Spikx

My Little Pwny
Avatar
Registered: Jan 2002
Location: Scotland
Posts: 13504
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
Registered: May 2000
Location: /home/noe/
Posts: 3514
Jetzt hab ich's:
DELETE FROM tabelle WHERE SUBSTRING_INDEX(datum, '.', '-1') = (DATE_FORMAT(NOW(), '%Y')-1);

Nico

former person of interest
Registered: Sep 2006
Location: -
Posts: 4082
yeah :)

fatmike182

Agnotologe
Registered: Oct 2005
Location: VIE
Posts: 4223
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
Registered: May 2000
Location: /home/noe/
Posts: 3514
@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
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz