Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datumsfunktionen bei Firebird (https://www.delphipraxis.net/43444-datumsfunktionen-bei-firebird.html)

buyden 4. Apr 2005 10:03

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:
 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;
leider bekomm ich immer nen arithmetischen Fehler von Firebird.
"Eingangsdatum" ist DATE.

einfach month(eingangsdatum) möchte Firebird ja gar nicht.

das nächste query braucht die aktuelle Woche.

Ideen??

omata 4. Apr 2005 21:19

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:
SELECT (1.000 * COUNT(nummer)) / (COUNT(DISTINCT eingangsdatum))
FROM auftrag
WHERE EXTRACT(MONTH FROM eingangsdatum) = :monat
HAVING COUNT(DISTINCT eingangsdatum) > 0
MfG
Thorsten

buyden 5. Apr 2005 12:25

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.

omata 5. Apr 2005 18:55

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

buyden 7. Apr 2005 09:28

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:
  with frmdata.qustat3 do
    begin
      close;
      sql.Clear;
      sql.Add('SELECT COUNT(nummer)
               FROM auftrag
               WHERE EXTRACT(WEEK FROM ausgangsdatum)= '+inttostr(woche)+' ;');
      open;
    end;
Ist mir langsam zu dumm wegen jedem Misst nachzufragen aber ich hab noch keine Dokumentation von Firebird SQL, die nicht 50€ kostet, gefunden.

kiar 7. Apr 2005 10:28

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 Hierhier etwas.

raik

buyden 7. Apr 2005 14:39

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:

kiar 7. Apr 2005 15:17

Re: Datumsfunktionen bei Firebird
 
hallo,

dann bastele dir ebend eine Funktion :mrgreen:

hier findest du eine anleitungich mache mir eine Funktion

raik

buyden 11. Apr 2005 15:12

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??

kiar 11. Apr 2005 15:28

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.
Seite 1 von 2  1 2      

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