Archiv verlassen und diese Seite im Standarddesign anzeigen : SQL: Prüfen ob gegebenes Datum in einem Bereich liegt
Hallo
habe eine Tablle mit Datumswerten. Einmal DATUM_VON und einmal DATUM_BIS
Des weiteren hab ich ein aktuelles Datum (Tagesdatum)
z.B heute 20061218
Ich will nun alle Sätze aus der DB in denen das aktuelle Datum zwischen DATUM_VON und DATUM_BIS liegt.
Wie gestalte ich so einen Select, vermutlich ist es eine einfache Antwort, habe nirgends was gefunden und komme nicht selbst drauf
darph
2006-12-18, 16:36:50
SELECT *
FROM tabelle
WHERE HEUTE < DATUM_BIS
AND HEUTE > DATUM_VON;
Das funktioniert, weil die Reihenfolge yyyymmdd eingehalten ist. Duz aber nur, wenn alle Daten als Integer gespeichert sind. Wenn es Strings sind, kann's Probleme machen.
Für solche Späße wäre es aber sicher besser, das Ganze als Timestamps zu speichern. Damit kann man wunderbar rechnen.
wintermute
2006-12-18, 17:23:21
select * from table wehre TAGESDATUM between DATUMVON and DATUMBIS
sollte auch funktionieren, aber ich kann es leider nicht testen.
Das sollte dann diesem hier entsprechen (Darph leicht modifiziert)
SELECT *
FROM tabelle
WHERE HEUTE =< DATUM_BIS
AND HEUTE >= DATUM_VON;
Wie gesagt, konnte es nicht testen.
Grüße
wintermute
Das alles geht eben nicht, der meint immer Unknown Expression, vermute weil zuerst der zu prüfende wert kommt und dann erst das feld.
Es handelt sich um Oracle
das geht auch so bei oracle.
in dem SQL++ (oder sollte man zu dieser Gülle -- sagen?) solltest du doch ne Anzeige bekommen _wo_ die unknown Expression ist.
Deine Felder sind auch alle im DATE Format?
Dann muss es mit Oracle so klappen, wie von wintermute beschrieben.
nefu
Edit:
zu schnell überflogen, sorry.
Kannst du ein describe auf die Tabelle machen und deine Abfrage hier reinkopieren?
Mein Versuch (Oracle 10.2.0.2)
scott@TEST102 >create table dtab(date_von date, date_bis date);
Tabelle wurde erstellt.
scott@TEST102 >insert into dtab values(sysdate, sysdate + 90);
1 Zeile wurde erstellt.
scott@TEST102 >insert into dtab values(sysdate -100, sysdate + 10);
1 Zeile wurde erstellt.
scott@TEST102 >insert into dtab values(sysdate -100, sysdate - 30);
1 Zeile wurde erstellt.
scott@TEST102 >commit;
Transaktion mit COMMIT abgeschlossen.
scott@TEST102 >select * from dtab;
DATE_VON DATE_BIS
-------- --------
18.12.06 18.03.07
09.09.06 28.12.06
09.09.06 18.11.06
scott@TEST102 >select * from dtab where date_von <= sysdate and date_bis >= sysdate;
DATE_VON DATE_BIS
-------- --------
18.12.06 18.03.07
09.09.06 28.12.06
scott@TEST102 >
Trifft das deine Fragestellung?
nefu
mapel110
2008-04-07, 11:33:27
Ich hab hiermit jetzt auch ein Problem.
Den Zeitraum hab ich eingegeben und mit "mktime" eine Zeitangabe draus gemacht. Wird als integer wohl behandelt, so wie eine Kontrollausgabe aussieht => "1109631600"
Jetzt hab ich eine Datumsspalte, die genauso formatiert ist in einer Tabelle. Also sollte ich doch damit arbeiten können in einer SQL-Abfrage?
SELECT * FROM X WHERE datumspalte >= Anfangsdatum AND datumspalte <= Enddatum
Er gibt mir keine Fehlermeldung aus, aber er berücksichtigt den Zeitraum nicht und er zerhaut mir obendrein die Datensätze, sind teilweise leer bei der Ausgabe.
/edit
Hat sich erledigt. Syntax-Fehler in der WHERE-Klausel....
vBulletin®, Copyright ©2000-2025, Jelsoft Enterprises Ltd.