![]() |
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:
Möchte alle Datensätze filtern, die älter als eine Stunde sind, oder älter als ein Tag. So wie oben klappt es aber nicht.
WHERE ((TERMIN = SYSDATE AND UHRZEIT < (SYSTIME - 1)) OR (TERMIN < SYSDATE))
Gruss Holger |
Re: Systemzeit in SQL - Abfrage nutzen
CURRENT_DATE CURRENT_TIME
|
Re: Systemzeit in SQL - Abfrage nutzen
Zitat:
Gruss Holger |
Re: Systemzeit in SQL - Abfrage nutzen
hi,
wie sieht jetzt genau der source aus? welche fehlermeldungen genau? Gruß |
Re: Systemzeit in SQL - Abfrage nutzen
Soe sieht der SQL-Code aus:
Delphi-Quellcode:
... dann kommt die Meldung CURRENT_TIME -> ungültiger Bezeichner
WHERE ((TERMIN = SYSDATE AND UHRZEIT < (CURRENT_TIME - 1)) OR (TERMIN < SYSDATE))
Gruss Holger |
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:
Gruss
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
|
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:
... kam wahrscheinlich kein fehler sondern nur nicht die gewünschte datenmenge?
WHERE ((TERMIN = SYSDATE AND UHRZEIT < (SYSTIME - 1)) OR (TERMIN < SYSDATE))
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 |
Re: Systemzeit in SQL - Abfrage nutzen
Vielen dank für die Tipps.
Habe das mal so umgesetzt:
Delphi-Quellcode:
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 ?
(SELECT SYSDATE - 1/24 FROM dual) as TEST
Gruss Holger P.S.: Hierbei: WHERE ((TERMIN = SYSDATE AND UHRZEIT < (SYSTIME - 1/24)) OR (TERMIN < SYSDATE)) kam die Fehlermeldung: Ungültige Zahl |
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.
|
Re: Systemzeit in SQL - Abfrage nutzen
Hallo,
UHRZEIT ist ein VARCHAR2(5) - Feld und TERMIN ist ein DATE - Feld Gruss Holger |
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.
|
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:
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.
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)
SQL-Code:
Das war jetzt einfach mal zum gucken obs klappt. Nun noch die Selektion:
select termin, to_date(to_char(termin, 'DD.MM.YYYY')||uhrzeit, 'DD.MM.YYYY HH24:MI') from datetest
SQL-Code:
Und brav aufräumen...
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
SQL-Code:
Gruss,
drop table datetest
Ken |
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