![]() |
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 |
Re: Zeitangabe 1 Jahr in Firebird SQL angeben
Hallo Peter,
ohne UDF fällt mir auf die Schnelle nur dieser Weg ein:
SQL-Code:
Grüße vom marabu
update tbl set datum = cast(extract(year from datum) + 1 as char(4)) || substring(datum from 5 for 6)
|
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 |
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; |
Re: Zeitangabe 1 Jahr in Firebird SQL angeben
Im Gegensatz zu Hansa würde lagere ich was geht in die Datenbank aus.
Zitat:
|
Re: Zeitangabe 1 Jahr in Firebird SQL angeben
Zitat:
SQL-Code:
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.
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 ; ^ Zitat:
|
Re: Zeitangabe 1 Jahr in Firebird SQL angeben
Zitat:
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 ![]() 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));
|
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:
|
Re: Zeitangabe 1 Jahr in Firebird SQL angeben
Mit Beispiel mit DataSet meinte ich
Zitat:
|
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 11:11 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