Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datum berechnen mit InterBase (https://www.delphipraxis.net/151503-datum-berechnen-mit-interbase.html)

cugar 20. Mai 2010 12:21

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

mkinzler 20. Mai 2010 12:25

Re: Datum berechnen mit InterBase
 
Schaur dir mal die UDF Bibliothek von Interbase mal an

Lemmy 20. Mai 2010 13:11

Re: Datum berechnen mit InterBase
 
Hi,

ich weiß nicht was du damit erreichen willst, aber was spricht denn gegen ein

SQL-Code:
Select (MTStart+(365*MTLaufzeit/12) FROM XYZ;
Schaltjahre fallen hier halt unter den Tisch.... Wenn das kein Problem darstellt ist das sicherlich das einfachste...

Grüße

dataspider 20. Mai 2010 13:39

Re: Datum berechnen mit InterBase
 
Hi,

wenn Interbase Mod kennt (notfalls die udf einbinden), dann wäre das mein Ansatz:

SQL-Code:
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 habe hier mal 24 Monate auf das aktuelle Datum addiert.
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]

cugar 20. Mai 2010 17:25

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

mkinzler 20. Mai 2010 18:04

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

cugar 26. Mai 2010 06:53

Re: Datum berechnen mit InterBase
 
Zitat:

Zitat von mkinzler
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

Hab früher nur mit Paradox zu tun gehabt. Interbase ist noch Neuland für mich, das ich täglich neu enddecke.

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 08:42 Uhr.

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