Feld für Datumsvariable

holule

Grünschnabel
Hallo, ich suche eine Möglichkeit von einer Tabelle nur die Daten auszulesen, die im Zeitraum von bis sind. Dazu benötige ich ja irgendwie zwei Felder die Variablen aufnehmen können.

Leider habe ich gar keinen Plan wie ich das mit Oracle 10g xe erfüllen kann.
Danke für eure Hilfe
 
Hallo holule,

das kannst du bspw. mit BETWEEN testen:

SQL:
 SELECT * 
   FROM tabelle
  WHERE datumsspalte 
BETWEEN TO_DATE('01.01.2007','DD.MM.YYYY')
    and TO_DATE('15.01.2007','DD.MM.YYYY')

Alternativ kannst du auch eine Stored Function schreiben.

Markus
 
Hallo Markus, danke für den Tipp, funktioniert super. Was ich aber brauche ist die Möglichkeit der beiden Daten irgendwo bzw. irgendwie einzugeben. Denn ich habe nicht immer die Möglichkeit ein neues Statement einzugeben. Eventuell kannst Du mir da auch auf die Sprünge helfen.

ich benutze Oracle 10g express

Danke Holule
 
Zuletzt bearbeitet:
Hi

Suchst du also eine Art Formular?
Wenn ja:
Da wirst du eine Script- oder Programmiersprache bemühen müssen, mit der du das realisierst.
 
Hallo Nico, Danke für Deinen Tipp.
Ja ich versuche in einem Bericht die beiden Daten unterzubringen. Das Statement von Markus ist eigentlich die Lösung, wenn das Datum als Variable einzugeben wäre. Eventuell hast Du eine Idee für mich.

SQL:
 SELECT * 
   FROM tabelle
  WHERE datumsspalte 
BETWEEN TO_DATE('01.01.2007','DD.MM.YYYY')
    and TO_DATE('15.01.2007','DD.MM.YYYY')
 
Wie jetzt Bericht? Meinst du Crystal Reports?
Wie schon geschrieben, solche Dialoge wie in Access gibts unter Oracle nicht. Wenn du eine GUI willst, musst du eine Skript oder Programmiersprache bemühen.
Wenn es dir nur darum geht den Query mit Variablen auszustatte, dann nutz doch eine Stored Procedure
 
Hallo nochmal,

erzeuge dir z.B. eine Stored Function etwa so (ungetestet):

SQL:
CREATE OR REPLACE FUNCTION sucheEintraege( datVon VARCHAR2, datBis VARCHAR2) RETURN SYS_REFCURSOR IS
  cur SYS_REFCURSOR;
BEGIN
  OPEN cur FOR
      SELECT *
        FROM tabelle
       WHERE datumsspalte BETWEEN TO_DATE(datVon,'DD.MM.YYYY')
                              AND TO_DATE(datBis,'DD.MM.YYYY');

  RETURN cur;
END;

Die Funktion liefert dir direkt ein Resultset zurück.
Nutzen kannst du die Funktion nun so (Syntax variiert je nach Host-Umgebung)

SQL:
begin ? := sucheEintraege( ?, ?); end;

oder auch
SQL:
{ :1 := call sucheEintraege( :2, :3 ); }

Die Platzhalter (Bind-Variablen) musst du dann in deiner Hostumgebung entsprechend vorbereiten und den Rückgabewert dann entsprechend definieren.

Direkt zum schnellen Testen aus SQL*Plus oder ähnlichem kannst du auch folgendes machen:
SQL:
  SELECT sucheEintrage('01.01.2007', '15.01.2007') FROM DUAL;

Hoffe es hilft,
Markus
 
Zurück