![]() |
Datenbank: Firebird • Version: 1.5 • Zugriff über: ZEOS
Datumsfunktionen bei Firebird
Hi,
ich hab mal wieder ein Problem mit Firebird SQL: ich möchte nen Tagesdurchschnitt des aktuellen Monats berechnen und hab dazu folgenden code
Delphi-Quellcode:
leider bekomm ich immer nen arithmetischen Fehler von Firebird.
with frmdata.qustat17 do
begin close; sql.Clear; sql.add('SELECT (1.000 * COUNT(nummer)) / (COUNT(DISTINCT eingangsdatum)) FROM auftrag WHERE EXTRACT(MONTH FROM eingangsdatum)= ' + inttostr(monthof(date))+';'); open; end; "Eingangsdatum" ist DATE. einfach month(eingangsdatum) möchte Firebird ja gar nicht. das nächste query braucht die aktuelle Woche. Ideen?? |
Re: Datumsfunktionen bei Firebird
Moin,
der arithmetische Fehler tritt auf, wenn das Ergebnis keine Zeilen enthält (also durch Null geteilt wird). Eigentlich hätte ich erwartet, dass es dann keine Zeile gibt. Firebird sieht das aber leider anders. Man kann dieses Verhalten aber erzwingen...
SQL-Code:
MfG
SELECT (1.000 * COUNT(nummer)) / (COUNT(DISTINCT eingangsdatum))
FROM auftrag WHERE EXTRACT(MONTH FROM eingangsdatum) = :monat HAVING COUNT(DISTINCT eingangsdatum) > 0 Thorsten |
Re: Datumsfunktionen bei Firebird
OK, nen Fehler bringt Firebird jetzt zwar nicht mehr aber irgendwie stimmt das Ergebnis auch nicht.
bei 12 aufträgen in 3 tagen (im aktuellen Monat) sollte doch eigentlich 4 rauskommen, das Query liefert aber 2,666 zurück. |
Re: Datumsfunktionen bei Firebird
Moin,
tja ich hatte zwar einbißchen herumprobiert, hatte das Problem so nicht gesehen. Schade, war nur ein Versuch Firebird zu zwingen das Richtige zu tun. Da das scheinbar nicht geht, musst du wohl anders daran gehen. Teste doch einfach vorher, ob es Einträge für den Monat gibt, also COUNT(DISTINCT eingangsdatum)) > 0 ist. Wenn ja, dann machst du deine Abfrage (ohne den HAVING-Teil). MfG Thorsten |
Re: Datumsfunktionen bei Firebird
Hi,
ich hab das ganze jetzt umgangen, indem ich nur die einzelnen Werte per SQL abfrage und dann mit den entsprechenden Variablen rechne. nicht gerade Speicherschonend aber zweckmäßig. Jetzt hab ich nur noch das Problem, das Firebird nicht die Woche aus dem Datum extrahieren kann.
Delphi-Quellcode:
Ist mir langsam zu dumm wegen jedem Misst nachzufragen aber ich hab noch keine Dokumentation von Firebird SQL, die nicht 50€ kostet, gefunden.
with frmdata.qustat3 do
begin close; sql.Clear; sql.Add('SELECT COUNT(nummer) FROM auftrag WHERE EXTRACT(WEEK FROM ausgangsdatum)= '+inttostr(woche)+' ;'); open; end; |
Re: Datumsfunktionen bei Firebird
hallo, ich weis jetzt nicht, ob firebird das schon implementiert hat, aber für den Interbase gab es eine funktion in der Free udf lib .
vielleicht findest du Hier ![]() raik |
Re: Datumsfunktionen bei Firebird
Es muss doch irgendwo ne brauchbare Referenz über die SQL-Funktionen in Firebird geben. Für MySQL findet man tonnenweise Informationen aber leider nicht für Firebird.
Auf deinem Link assoziieren die Firebird ausschließlich mit nem Auto - ist also nich wirklich hilfreich. :wink: |
Re: Datumsfunktionen bei Firebird
hallo,
dann bastele dir ebend eine Funktion :mrgreen: hier findest du eine anleitung ![]() raik |
Re: Datumsfunktionen bei Firebird
kann man denn die IB FreeUdfLib auch in Firebird einbinden??
die .dll hab ich jedenfalls schonmal in meinen UDF-Ordner des Embedded-Servers geschubst. Wie sag ich denn jetzt aber Firebird, das es ne Funktion aus der extra-.dll verwenden soll?? |
Re: Datumsfunktionen bei Firebird
zu mindestens funktionieren die funktionen bei mir und ich habe die .dll in einer Firebird 1.5 drin.
also einfach in ibexpert das script ib_udf.sql ausführen und fertig :mrgreen: hier ist aber keine KW function drin. raik |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:10 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-2025 by Thomas Breitkreuz