Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi [SQL]Tag + Monat in Date umwandeln ? (https://www.delphipraxis.net/52728-%5Bsql%5Dtag-monat-date-umwandeln.html)

Hansa 2. Sep 2005 13:00

Datenbank: FB 1.5 • Zugriff über: blubb

[SQL]Tag + Monat in Date umwandeln ?
 
Hi,

ich habe hier einen Monat und das Jahr (Tag interessiert nicht). Die DB erwartet aber ein Date. Wie baue ich daraus jetzt ein Date ?

shmia 2. Sep 2005 13:13

Re: [SQL]Tag + Monat in Date umwandeln ?
 
Mit EncodeDate:
Delphi-Quellcode:
var
   datum: TDateTime;
   jahr, monat : integer;
begin
   jahr := ...
   Monat := ...
   datum := EncodeDate(jahr, monat, 1),
end;

alzaimar 2. Sep 2005 13:15

Re: [SQL]Tag + Monat in Date umwandeln ?
 
Man kann aus einem Monat und einem Jahr nun mal kein Datum erzeugen. Dir fehlt der Tag. Irgendeiner. Ich nehm den ersten.
Dann so (kenn kein Firebird, aber der kann ja wohl convert) in MSSQL:
Delphi-Quellcode:
declare @month int, @year int
set @month = 10
set @year = 2005

select convert (datetime, convert (varchar(2), @month)+'/01/'+convert (varchar(4), @year),101)
Convert dürfte ANSI-SQL sein, der dritte Parameter (101) sagt MSSQL, das das Datum in der From 'mm/dd/yyyy' formartiert ist. Irgendsowas gibt es doch auch bei FB-SQL. Und, konvertiert der nicht von alleine, sobald Du versuchst in ein Date-Feld einen String reinzuschreiben, der nach Datum riecht?

Hansa 2. Sep 2005 13:19

Re: [SQL]Tag + Monat in Date umwandeln ?
 
Thx, aber ich bräuchte die reinen SQL-Befehle. Ah, roter Kasten schlägt zu. :mrgreen: Convert ? Müßte es wohl sein.

Hansa 2. Sep 2005 13:36

Re: [SQL]Tag + Monat in Date umwandeln ?
 
Sorry, Convert scheint es nicht zu sein. Zumindest finde ich da nix drüber. Vielleicht etwas genauer : brauche praktisch das Gegenstück zu
SQL-Code:
EXTRACT DAY FROM DATEFELD
Ich habe also Tag (halt 1) und Monat und Jahr und das soll ein DATE werden.

Hansa 3. Sep 2005 14:15

Re: [SQL]Tag + Monat in Date umwandeln ?
 
Hier ist eine interessante Seite :

http://firebird.sourceforge.net/inde...id=ostenried_1

Die ist echt Top und noch von Landsmann. :thumb: Hehe, da sind sogar die "Heiligen Drei Koenige" drin ! Ist wohl ein Bayer. :mrgreen:

Jetzt ist aber folgende Frage aufgetaucht :

SQL-Code:
CREATE PROCEDURE PROC_ENCODEDATE (
    AYEAR INTEGER,
    AMONTH INTEGER,
    ADAY INTEGER)
RETURNS (
    RESULT DATE)
AS
BEGIN
   Result = cast( ADay || '.' || AMonth || '.' || AYear as DATE);
   suspend;
END
^
Das funktioniert auch, aber das hier nicht :
SQL-Code:
CAST ('20.08.2005' AS DATE);
Was ist daran falsch ?

marabu 3. Sep 2005 14:56

Re: [SQL]Tag + Monat in Date umwandeln ?
 
Hallo Hansa,
Zitat:

Zitat von Hansa
Das funktioniert auch, aber das hier nicht:
SQL-Code:
CAST ('20.08.2005' AS DATE);
Was ist daran falsch ?

falsch ist vielleicht etwas zu hart - aber das interne Format entspricht dem Datum im DIN Format. Der Embedded SQL Guide schreibt zum Thema explicit conversion from character to date type:

Zitat:

Succeeds if the string is in the following format: YYYY-MM-DD
Bei mir funktioniert aber auch dein Datumsformat problemlos.

Grüße vom marabu

Hansa 3. Sep 2005 15:14

Re: [SQL]Tag + Monat in Date umwandeln ?
 
Falsch ist daran gar nichts. Der Fehler lag in dem aufrufenden Programm und da waren 2 Parameter vertauscht. 8) Geht echt verblüffend einfach mit Firebird, wenn man weiß wie. :mrgreen:

Hansa 3. Sep 2005 21:58

Re: [SQL]Tag + Monat in Date umwandeln ?
 
Noch ein Fehler :

SQL-Code:
CAST ('12.08.2005' as DATE)
das geht ja so, aber das hier :

SQL-Code:
CAST (:DATUM as DATE)
geht nicht ! "Data type unknown." Der feste Wert nützt mich ja da nichts. 8) Was ist noch zu tun ?

marabu 3. Sep 2005 22:29

Re: [SQL]Tag + Monat in Date umwandeln ?
 
Na, dann setze doch den Datentyp, bevor du das statement zur Ausführung bringst, Hansa.

Delphi-Quellcode:
query.Parameters.ParamByName('DATUM').DataType := ftString;
Oder verzichte ganz auf den CAST im SQL und mache ihn gleich im Programm.

marabu

PS: Kennst du das alte Lied Ein Loch ist im Eimer...?


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:52 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 by Thomas Breitkreuz