AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Zeitangabe 1 Jahr in Firebird SQL angeben
Thema durchsuchen
Ansicht
Themen-Optionen

Zeitangabe 1 Jahr in Firebird SQL angeben

Ein Thema von peteress · begonnen am 13. Jan 2007 · letzter Beitrag vom 15. Jan 2007
Antwort Antwort
Seite 1 von 2  1 2      
peteress

Registriert seit: 6. Sep 2004
49 Beiträge
 
#1

Zeitangabe 1 Jahr in Firebird SQL angeben

  Alt 13. Jan 2007, 14:38
Datenbank: Firebird • Version: 1.5 • Zugriff über: ibexpert
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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Zeitangabe 1 Jahr in Firebird SQL angeben

  Alt 13. Jan 2007, 16:37
Hallo Peter,

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

update tbl set datum = cast(extract(year from datum) + 1 as char(4)) || substring(datum from 5 for 6) Grüße vom marabu
  Mit Zitat antworten Zitat
peteress

Registriert seit: 6. Sep 2004
49 Beiträge
 
#3

Re: Zeitangabe 1 Jahr in Firebird SQL angeben

  Alt 14. Jan 2007, 19:01
Hallo marabu,

der String sieht doch etwas komplizierter ausals ich gehofft hatte.

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

Gruss
Peter
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#4

Re: Zeitangabe 1 Jahr in Firebird SQL angeben

  Alt 14. Jan 2007, 21:01
Es gibt umfangreiche Zeit/Datums-Routinen in Delphi. Wieso muss immer alles und jedes auf DB-Ebene gemacht werden ? 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;
Gruß
Hansa
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Zeitangabe 1 Jahr in Firebird SQL angeben

  Alt 14. Jan 2007, 21:08
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?
Markus Kinzler
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#6

Re: Zeitangabe 1 Jahr in Firebird SQL angeben

  Alt 15. Jan 2007, 00:22
Zitat von mkinzler:
Im Gegensatz zu Hansa würde lagere ich was geht in die Datenbank aus.
Schöner Satz. 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 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.
Gruß
Hansa
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Zeitangabe 1 Jahr in Firebird SQL angeben

  Alt 15. Jan 2007, 07:12
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:

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));
Markus Kinzler
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#8

Re: Zeitangabe 1 Jahr in Firebird SQL angeben

  Alt 15. Jan 2007, 08:11
Was habe ich auf das Programm verlagert ? 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.
Gruß
Hansa
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Zeitangabe 1 Jahr in Firebird SQL angeben

  Alt 15. Jan 2007, 08:18
Mit Beispiel mit DataSet meinte ich

Zitat von hansa:
Delphi-Quellcode:
Dataset.Edit;
// Jahr erhöhen
Dataset.Post;
Markus Kinzler
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#10

Re: Zeitangabe 1 Jahr in Firebird SQL angeben

  Alt 15. Jan 2007, 08:22
Ein Date-Feld in FB-DB ist lächerlich. Wie gesagt : no time.
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:27 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