PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SQL: Prüfen ob gegebenes Datum in einem Bereich liegt


Gast
2006-12-18, 15:56:55
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

Gast
2006-12-18, 17:54:59
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

noid
2006-12-18, 18:43:01
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.

nefu
2006-12-18, 22:16:23
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?

nefu
2006-12-18, 22:47:51
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....