+(SQL) : Delete aus Datenbank ?
MichaelR
- php
Hallo,
in einer Datenbank sind in einem Feld folgende Werte (Datum) gespeichert:
12 Dec 2002
20 Dec 2002
24 Dec 2002
[...]
Format: text
(Ich weiß nicht optimal, aber das lässt sich jetzt nicht mehr ganz rückgängig machen, aufgrund der Menge an Eintragungen ...)
In einer Delete-Routine wollte ich jetzt alle Eintragungen herauslöschen, die als Bedingungen haben:
"Eintragungen älter als " -- "manuell gesetztes Datum der Form 20 Dec 2002"
Allerdings hab ich jetzt ein Problem, weil das mit dem Vergleich "älter als" nicht so geht, wie ich gedacht hätte.
Wie kann ich denn (vielleicht mit wenig Aufwand) das so hinkriegen, dass eben alle Eintragungen "älter als" ein bestimmtes Datum gelöscht werden ?
Danke für jede Hilfe
Michael
Hallo Michael,
Ich kenne zwar nicht dein delete-statement aber machs doch mit delete ... where datum<24.12.20002
Sollte funktionieren.
Gruss!
Siegfried
Hallo,
in einer Datenbank sind in einem Feld folgende Werte (Datum) gespeichert:
12 Dec 2002
20 Dec 2002
24 Dec 2002
[...]Format: text
(Ich weiß nicht optimal, aber das lässt sich jetzt nicht mehr ganz rückgängig machen, aufgrund der Menge an Eintragungen ...)
In einer Delete-Routine wollte ich jetzt alle Eintragungen herauslöschen, die als Bedingungen haben:
"Eintragungen älter als " -- "manuell gesetztes Datum der Form 20 Dec 2002"
Allerdings hab ich jetzt ein Problem, weil das mit dem Vergleich "älter als" nicht so geht, wie ich gedacht hätte.
Wie kann ich denn (vielleicht mit wenig Aufwand) das so hinkriegen, dass eben alle Eintragungen "älter als" ein bestimmtes Datum gelöscht werden ?
Danke für jede Hilfe
Michael
Hi Siegfried,
Ich kenne zwar nicht dein delete-statement aber machs doch mit delete ... where datum<24.12.20002
Sollte funktionieren.
Das Problem ist aber dass dieser Vergleich "älter als" mit den Werten "20 Dec 2002" etc. nicht geht.
Also wenn ich wähle, dass alles älter als 25 Dec 2002 gelöscht werden soll, dann klappt das irgendwie net.
Gruß
Michael
"Eintragungen älter als " -- "manuell gesetztes Datum der Form 20 Dec 2002"
Wie kann ich denn (vielleicht mit wenig Aufwand) das so hinkriegen, dass eben alle Eintragungen "älter als" ein bestimmtes Datum gelöscht werden ?
Also das mit "wenig Aufwand" kannst du vergessen weil das hast du dir ja schon bei der Entwicklung der Eintragungs-Skripte verbockt! :)
Wie wärs wenn du in einem PHP-Skript mit ner Schleife (nach einem SELECT) jedes mal das Datum in einen 'handelsüblichen' Unix-Timestamp umwandelst... und dann weiter mit den Daten verfährst???
Was einfacheres fällt mir jetz nicht ein!
Grüße,
Aaron
Hallo, wäre es nicht möglich den Inhalt Deiner Tabelle in eine neue mit einer Spalte im Datumsformat zu kopieren? Danch kannst Du ja die neue Tabelle abfragen und das Problem wäre gelöst.
bei einer Access-DB:
Insert into
select cdate(spaltenname),....
from tabellenname
Hallo,
in einer Datenbank sind in einem Feld folgende Werte (Datum) gespeichert:
12 Dec 2002
20 Dec 2002
24 Dec 2002
[...]Format: text
(Ich weiß nicht optimal, aber das lässt sich jetzt nicht mehr ganz rückgängig machen, aufgrund der Menge an Eintragungen ...)
In einer Delete-Routine wollte ich jetzt alle Eintragungen herauslöschen, die als Bedingungen haben:
"Eintragungen älter als " -- "manuell gesetztes Datum der Form 20 Dec 2002"
Allerdings hab ich jetzt ein Problem, weil das mit dem Vergleich "älter als" nicht so geht, wie ich gedacht hätte.
Wie kann ich denn (vielleicht mit wenig Aufwand) das so hinkriegen, dass eben alle Eintragungen "älter als" ein bestimmtes Datum gelöscht werden ?
Danke für jede Hilfe
Michael
Hi,
Hallo, wäre es nicht möglich den Inhalt Deiner Tabelle in eine neue mit einer Spalte im Datumsformat zu kopieren? Danch kannst Du ja die neue Tabelle abfragen und das Problem wäre gelöst.
bei einer Access-DB:
Insert into
select cdate(spaltenname),....
from tabellenname
Wahrscheinlich bleibt nur eine komplette Konvertierung in ein richtiges Datumsformat, mit dem man dann auch was anfangen kann.
Grüße
Michael
Hallo,
Du hast ja nichts über das verwendete Datenbanksystem erzählt. Daher wird es schwierig, Dir konkrete Tipps zu geben.
Ich sehe ad hoc zwei Ansätze, die eventuell möglich sind:
1.) Wenn das Datenbanksystem eine entsprechende Funktion bereitstellt, die es erlaubt, Strings (bzw. Textfeld-Inhalte) in Datumswerte umzuwandeln, dann kannst Du das eventuell in deinem DELETE-Statement ausnutzen. Oft reicht es auch wenn eien Funktion für Datumsberechnungen, wie beispielsweise DATE_ADD() oder ähnliches existiert, bei der das Ergebnis ein Datumswert ist, aber das Startdatum impliziet auhc aus einem String ermittelt werden kann. Allerdings müssen diese Funktionen auch mit Deinem Datumsformat umgehen können, was nicht immer der Fall ist.
2.) Du erzeugst in der Tabell einen neue Spalte mit einem DATE-Datentyp und konvertiest die Textversion einmal in echte Datumswerte. Das könnte ja auch ein kleines Hilfsprogramm erledigen, falls Du es mit den Datenbankmitteln einfahc nicht hinkriegst. Danach solltest Du allerdinsg nur mehr mit dem Datumsfeld arbeiten und sicherheitshalber das Texxtfeld komplett löschen.
Das ist imho die bessere Variante, hat allerdings den 'Nachteil', dass auch Deine Anwendungen, die auf diese Tabelle zugreifen, entsprehcend mozifiziert werden müssen, um mit der neuen Tabellenstruktur klar zu kommen. Erfahrungsgemäß ist das allerdinsg nicht eine sehr aufwendige Sache, sofern man die verwendeten Programmiersprahcen halbwegs beherrscht und über dne Quellcode verfügt.
Grüße
Klaus