![]() |
Datenbank: InterBase • Version: 7.5 • Zugriff über: Delphi Prof. 2006
Datum berechnen mit InterBase
Hallo,
suche schon 2 Stunden bei google und nix :) Habe ein (hoffentlich)einfaches Problem. Meine Tabelle enthält ua. folgende Felder: MTStart, MTLaufzeit. Beispiel: MTStart = 19.05.2010 MTLaufzeit = 24 (Monate) Wie muss meine select aussehen, um ein Feld zu erhalten zb Enddatum = 19.05.2012 ??? Hab schon mit extract experimentiert, komme aber nicht dahinter, sowas wie ADD_MONTH kennt interbase wohl nicht... PS. Es wäre über Delphi ohne sql lösbar, möchte es gerne aber über die Abfrage machen. Viele Grüsse Andreas |
Re: Datum berechnen mit InterBase
Schaur dir mal die UDF Bibliothek von Interbase mal an
|
Re: Datum berechnen mit InterBase
Hi,
ich weiß nicht was du damit erreichen willst, aber was spricht denn gegen ein
SQL-Code:
Schaltjahre fallen hier halt unter den Tisch.... Wenn das kein Problem darstellt ist das sicherlich das einfachste...
Select (MTStart+(365*MTLaufzeit/12) FROM XYZ;
Grüße |
Re: Datum berechnen mit InterBase
Hi,
wenn Interbase Mod kennt (notfalls die udf einbinden), dann wäre das mein Ansatz:
SQL-Code:
Ich habe hier mal 24 Monate auf das aktuelle Datum addiert.
select
current_date , extract(day from current_date) , mod((extract(year from current_date) * 12 + extract(month from current_date) + 24), 12) , trunc((extract(year from current_date) * 12 + extract(month from current_date) + 24) /12) from rdb$database Ich gehe davon aus, dass der Tag der gleiche ist. Wenn du das wieder zusammensetzt und castest, erhältst du das Datum. Frank [Edit]Grrr... Wenn Monat 12 ist, kommt hier 0 raus. Dann muss noch ein Case rein. Eigentlich schon ein Fall für eine Stored Procedure. Bei den Udf' s gibt es noch AddMonth, ich versuche aber immer, ohne Udf' s auszukommen [sicherlich eine unnötige Macke von mir ;)] [/EDIT] |
Re: Datum berechnen mit InterBase
Danke euch für die schnelle Hilfe!
Wozu ich es brauche? Die Tabelle zeigt mir alle laufenden Mietverträge, soll das Ende zeigen und automatisch warnen wenn ein Vertrag zB in 3 Monaten endet. Ich möchte es über SQL machen, weil ich dann das Enddatum wie alle anderen auch sortieren kann. Ansonsten hätte ich nur die Möglichkeit über Delphi's Berechnete-Felder. Glaube bei Verträgen sind die Schaltjahre wichtig, sonst hätte ich den Vorschlag von Lemmy übernommen (da stimmte der Tag nicht nach 24 Monaten Start 24.05.2010 Laufzeit:24 Monate Ende:23.05.2012) Finde schade das Interbase keine einfacheren Wege bereitstellt um Datumsberechnungen durchzuführen. Viele Grüsse |
Re: Datum berechnen mit InterBase
Die UDF Bibliothek ist doch bei IB dabei. Du musst die Funktionen nur aktivieren (entsprechendes SQL-Skript ausführen). Auf UDFs kannst du dann genauso zugreifen wie auf "BuiltIn" Funktionen
|
Re: Datum berechnen mit InterBase
Zitat:
In der Datei ib_udf.sql befindet sich MOD: * m o d * ***************************************** * * Functional description: * Returns the remainder part of the * division of the two input parameters. * *****************************************/ DECLARE EXTERNAL FUNCTION mod INTEGER, INTEGER RETURNS DOUBLE PRECISION BY VALUE ENTRY_POINT 'IB_UDF_mod' MODULE_NAME 'ib_udf'; Dann noch sowas: LIBRARY udflib DESCRIPTION 'udflib.dll' DATA READ WRITE EXPORTS fn_abs fn_add2 fn_blob_bytecount fn_blob_linecount fn_blob_substr fn_dow fn_doy fn_fact fn_lower_c fn_max fn_moy fn_mul fn_sqrt fn_strcat fn_substr fn_sysdate fn_trim fn_trunc Sind es die Dateien mit den Zusatzfunktionen? Lohnt es sich diese einzubinden um meine Monate zu rechnen :) oder wäre einfacher das Prog. etwas zu verändern? Anstatt wie jetzt Startdatum und Laufzeit --> Startdatum und Enddatum zu nehmen. Mache ich es lieber, glaube ich, so. Wenn ich das Enddatum habe, kann ich eine Warnung ausgeben wenn das Enddatum minus zB.90 Tage erreicht wurde. Viele Grüsse Andreas |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:41 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