Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Zeitangabe 1 Jahr in Firebird SQL angeben (https://www.delphipraxis.net/84225-zeitangabe-1-jahr-firebird-sql-angeben.html)

peteress 13. Jan 2007 14:38

Datenbank: Firebird • Version: 1.5 • Zugriff über: ibexpert

Zeitangabe 1 Jahr in Firebird SQL angeben
 
Hallo,

ich steh da gerade auf dem Schlauch. Ich brauch ein ganz simplesupdate statement für Firebird.

eine Tabelle (Tab1) hat eine Spalte Datum in der ein Datum steht. diese soll um ein Jahr inkrementiert werden, aber ich bekomme die genaue Syntax nicht hin.

Also ungefähr:

update Tab1
set Datum = Datum + 1Jahr

aber wie schreibe ich z.B. ein Jahr hin.

Vielen Dank
Peter

marabu 13. Jan 2007 16:37

Re: Zeitangabe 1 Jahr in Firebird SQL angeben
 
Hallo Peter,

ohne UDF fällt mir auf die Schnelle nur dieser Weg ein:

SQL-Code:
update tbl set datum = cast(extract(year from datum) + 1 as char(4)) || substring(datum from 5 for 6)
Grüße vom marabu

peteress 14. Jan 2007 19:01

Re: Zeitangabe 1 Jahr in Firebird SQL angeben
 
Hallo marabu,

der String sieht doch etwas komplizierter ausals ich gehofft hatte.

Vielen Dank auf jeden Fall für die Mühe.

Gruss
Peter

Hansa 14. Jan 2007 21:01

Re: Zeitangabe 1 Jahr in Firebird SQL angeben
 
Es gibt umfangreiche Zeit/Datums-Routinen in Delphi. :P Wieso muss immer alles und jedes auf DB-Ebene gemacht werden ? :shock: Geh doch hin und lese das Feld mit dem Datum im Proramm ein, erhöhe das Jahr und schreibe es dann wieder in die DB zurück. Und die Datenbankzufriffe würde ich schön mein Dataset machen lassen. Immer die vorhandenen Methoden auch benutzen ! So ungefähr :

Delphi-Quellcode:
Dataset.Edit;
// Jahr erhöhen
Dataset.Post;

mkinzler 14. Jan 2007 21:08

Re: Zeitangabe 1 Jahr in Firebird SQL angeben
 
Im Gegensatz zu Hansa würde lagere ich was geht in die Datenbank aus.
Zitat:

Und die Datenbankzufriffe würde ich schön mein Dataset machen lassen. Immer die vorhandenen Methoden auch benutzen !
Warum erst auf den Client Laden, wenn ich den Wert nicht brauche, sondern nur in der Datenbank ändern will?

Hansa 15. Jan 2007 00:22

Re: Zeitangabe 1 Jahr in Firebird SQL angeben
 
Zitat:

Zitat von mkinzler
Im Gegensatz zu Hansa würde lagere ich was geht in die Datenbank aus.

Schöner Satz. :shock: Ich mache das schon ähnlich. Allerdings kommt nicht alles in die DB, sondern nur das, wo es mit vertretbarem Ausmaß auch Sinn macht. Na gut, ist ja schnell gemacht. In der DB das Jahr eines einzelnen Tabellen-Feldes um 1 zu erhöhen, das könnte man mit solch einer SP machen :

SQL-Code:
SET TERM ^ ;

CREATE PROCEDURE JAHREINSHOEHERANZEIGEN;
RETURNS (
    JAHR_OUT INTEGER)
AS
DECLARE VARIABLE JAHR INTEGER;
DECLARE VARIABLE NR INTEGER;
DECLARE VARIABLE DATUM DATE;
BEGIN
  SELECT NR, DATUM FROM TABLEX A WHERE A.NR = 1600 INTO :NR,:DATUM;
  JAHR = CAST (extract(year from DATUM) AS INTEGER);
  JAHR = JAHR + 1;
  JAHR_OUT = JAHR;
  SUSPEND;
END^

SET TERM ; ^
Ne, so schnell gehts doch nicht. 8) Da wird nur lediglich der erhöhte Wert zurückgeliefert ! Um diesen Wert jetzt auch noch in der DB zu speichern, dazu muss da noch ein Update-Statement rein oder sonstwas. Noch eine SP vielleicht zum speichern ? Die CAST, EXTRACT usw. Syntax ist übrigens nicht ohne.

Zitat:

Zitat von mkinzler
Warum erst auf den Client Laden, wenn ich den Wert nicht brauche, sondern nur in der Datenbank ändern will?

Sorry, aber meine Kanonenkugeln für Spatzen sind alle. :mrgreen:

mkinzler 15. Jan 2007 07:12

Re: Zeitangabe 1 Jahr in Firebird SQL angeben
 
Zitat:

mkinzler hat folgendes geschrieben:
Warum erst auf den Client Laden, wenn ich den Wert nicht brauche, sondern nur in der Datenbank ändern will?
Sorry, aber meine Kanonenkugeln für Spatzen sind alle. Mr. Green
Überleg mal was dein Beispiel mit dem Dataset oben macht.
Es lädt alle Werte des aktuellen Datasensatzes auf den Client, dort wird dann der Wert des datums geändert und alle zurückgeschrieben.

Am Einfachsten lässt sich das Problem mit einer UDF lösen. Z.B. mit F_ADDYEAR aus der FreeAdhocUDF

Oder in einem Update-Skript, wie Achom oben schon beschriebne hat oder ohne Bezug auf Format in DB:

SQL-Code:
update tbl set datum = cast (Extract( day from datum) as char(2))||'.'||cast(extract( month from datum) as char(2))||'.'||cast(extract(year from datum) + 1 as char(4));

Hansa 15. Jan 2007 08:11

Re: Zeitangabe 1 Jahr in Firebird SQL angeben
 
Was habe ich auf das Programm verlagert ? :shock: Das Bsp. ist eine Stored Procedure in der DB ! "JAHR_OUT" liefert lediglich eine DB-Variable. Und deren Inhalt wird man ja wohl noch mit ähnlichen Mitteln in die DB zurückverfrachten könne. So, no time. :mrgreen:

mkinzler 15. Jan 2007 08:18

Re: Zeitangabe 1 Jahr in Firebird SQL angeben
 
Mit Beispiel mit DataSet meinte ich

Zitat:

Zitat von hansa
Delphi-Quellcode:
Dataset.Edit;
// Jahr erhöhen
Dataset.Post;


Hansa 15. Jan 2007 08:22

Re: Zeitangabe 1 Jahr in Firebird SQL angeben
 
Ein Date-Feld in FB-DB ist lächerlich. Wie gesagt : no time. :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:05 Uhr.
Seite 1 von 2  1 2      

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