Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Systemzeit in SQL - Abfrage nutzen (https://www.delphipraxis.net/99821-systemzeit-sql-abfrage-nutzen.html)

HolgerCW 18. Sep 2007 12:51

Datenbank: ORACLE • Version: 9 • Zugriff über: BDE

Systemzeit in SQL - Abfrage nutzen
 
Hallo zusammen,

wie kann man die Systemzeit in einer SQL - Abfrage benutzen ?

Delphi-Quellcode:
WHERE ((TERMIN = SYSDATE AND UHRZEIT < (SYSTIME - 1)) OR (TERMIN < SYSDATE))
Möchte alle Datensätze filtern, die älter als eine Stunde sind, oder älter als ein Tag. So wie oben klappt es aber nicht.

Gruss

Holger

mkinzler 18. Sep 2007 12:58

Re: Systemzeit in SQL - Abfrage nutzen
 
CURRENT_DATE CURRENT_TIME

HolgerCW 18. Sep 2007 13:07

Re: Systemzeit in SQL - Abfrage nutzen
 
Zitat:

Zitat von mkinzler
CURRENT_DATE CURRENT_TIME

-> Kommt die Meldung: ungültiger Bezeichner

Gruss

Holger

angos 18. Sep 2007 13:09

Re: Systemzeit in SQL - Abfrage nutzen
 
hi,

wie sieht jetzt genau der source aus? welche fehlermeldungen genau?

Gruß

HolgerCW 18. Sep 2007 13:15

Re: Systemzeit in SQL - Abfrage nutzen
 
Soe sieht der SQL-Code aus:

Delphi-Quellcode:
WHERE ((TERMIN = SYSDATE AND UHRZEIT < (CURRENT_TIME - 1)) OR (TERMIN < SYSDATE))
... dann kommt die Meldung CURRENT_TIME -> ungültiger Bezeichner

Gruss

Holger

ken_jones 18. Sep 2007 13:18

Re: Systemzeit in SQL - Abfrage nutzen
 
Sind nicht alle Records die älter als ein Tag sind automatisch älter als 1h? Da könntest du dir doch eine Abfrage sparen? Oder ist das Zeitfeld nicht überall gefüllt? Egal, hier ein Beispiel wie du mit dem Datum rechnen kannst:

SQL-Code:
select sysdate as "aktuell", sysdate-1 as "gestern", sysdate - 1/86400 as "vor einer Sekunde", sysdate - 1/1440 as "vor einer Minute", sysdate - 1/24 as "vor einer Stunde" from dual
Gruss

angos 18. Sep 2007 13:22

Re: Systemzeit in SQL - Abfrage nutzen
 
wer lesen kann ist klar im vorteil -.- es geht um oracle, sorry hab ich nicht aufgepasst.

bei deiner ersten code-version ...
Delphi-Quellcode:
WHERE ((TERMIN = SYSDATE AND UHRZEIT < (SYSTIME - 1)) OR (TERMIN < SYSDATE))
... kam wahrscheinlich kein fehler sondern nur nicht die gewünschte datenmenge?

Das Problem ist, dass Oracle imho bei "1" genau einen Tag abzieht und nicht wie von dir gewollt eine Stunde ;) Also musst du hier mit 1/24 arbeiten.

Delphi-Quellcode:
WHERE ((TERMIN = SYSDATE AND UHRZEIT < (SYSTIME - 1/24)) OR (TERMIN < SYSDATE))


[edit] @ken_jones: Er möchte scheinbar alle Datensätze die älter als eine stunde sind, aber auch welche die nicht von Heute sind ;)
[Edit 2] RS Fehler raus

HolgerCW 18. Sep 2007 13:55

Re: Systemzeit in SQL - Abfrage nutzen
 
Vielen dank für die Tipps.

Habe das mal so umgesetzt:
Delphi-Quellcode:
(SELECT SYSDATE - 1/24 FROM dual) as TEST
TEST beinhaltet ja jetzt das Datum und die Uhrzeit (welche um eine Stunde reduziert ist). Wie kann ich jetzt aus TEST nun nach der Uhrzeit abfragen ?

Gruss

Holger

P.S.:

Hierbei:
WHERE ((TERMIN = SYSDATE AND UHRZEIT < (SYSTIME - 1/24)) OR (TERMIN < SYSDATE))
kam die Fehlermeldung: Ungültige Zahl

ken_jones 18. Sep 2007 14:46

Re: Systemzeit in SQL - Abfrage nutzen
 
Gib doch eine kurze Info um was für Feldtypen es sich bei den 2 Feldern handelt, und was GENAU drinsteht, wenn es keine DATE Felder sind.

HolgerCW 18. Sep 2007 15:09

Re: Systemzeit in SQL - Abfrage nutzen
 
Hallo,

UHRZEIT ist ein VARCHAR2(5) - Feld und TERMIN ist ein DATE - Feld

Gruss

Holger

noidic 18. Sep 2007 15:13

Re: Systemzeit in SQL - Abfrage nutzen
 
Dann ist das Uhrzeit-Feld das Problem, ich nehme mal an da steht sowas wie "12:30" drin. Das müsstest du in ein Oracle-fähiges Datum umwandeln. Schau dir mal in der Oracle-Doku die TO_DATE - Funktion an, die müsste dir an der Stelle weiter helfen, ich hab die genaue Syntax grad nicht im Kopf.

ken_jones 18. Sep 2007 15:43

Re: Systemzeit in SQL - Abfrage nutzen
 
Da ich noch nicht genau weis, was im "uhrzeit" Feld drinsteht, gehe ich auch davon aus, dass es ein HH:MM Feld sein wird.
Ich baue mir jetzt mal eine minimalistische DB nach und stelle 3 Datensätze rein:

SQL-Code:
create table datetest (
  uhrzeit varchar2(5),
  termin date
  )
 
insert into datetest
values ('13:00', sysdate)

insert into datetest
values ('18:00', sysdate-1)

insert into datetest
values ('18:00', sysdate+1)
Da du NUR das Datum in Termin haben willst, aber es ein DATE Feld ist, musst du mit Trunc arbeiten. Ich hab hier zur Vereinfachung den Datumsteil des "termin" Feldes mit dem Zeitteil des "uhrzeit" Feldes zusammengefasst und in ein neues Datum gewandelt.

SQL-Code:
select termin, to_date(to_char(termin, 'DD.MM.YYYY')||uhrzeit, 'DD.MM.YYYY HH24:MI') from datetest
Das war jetzt einfach mal zum gucken obs klappt. Nun noch die Selektion:

SQL-Code:
select uhrzeit, trunc(termin) from datetest
where to_date(to_char(termin, 'DD.MM.YYYY')||uhrzeit, 'DD.MM.YYYY HH24:MI') < sysdate - 1/24
or trunc(termin) < trunc(sysdate) -- diese Zeile find ich nach wie vor überflüssig
Und brav aufräumen...
SQL-Code:
drop table datetest
Gruss,
Ken

HolgerCW 21. Sep 2007 09:34

Re: Systemzeit in SQL - Abfrage nutzen
 
Ja super,

danke für die ganzen Mühen. So klappt es

Danke und Gruss

Holger


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:54 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz