Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Welches DateTime Format schluckt jede Datenbank? (https://www.delphipraxis.net/205506-welches-datetime-format-schluckt-jede-datenbank.html)

IBExpert 18. Sep 2020 15:13

AW: Welches DateTime Format schluckt jede Datenbank?
 
wenn ich irgendwelche abstrusen strings bekommen würde und diese in gültige timestamps umwandeln sollte,
dann wäre mein weg mit firebird 3, diese beim Import durch eine selbstgeschriebene Stored Function zu schicken
so das der Insert in etwa so aussieht:

insert into tbl(id,ts) values(123, MeineFunktion('heute'));
insert into tbl(id,ts) values(124, MeineFunktion('jetzt'));
insert into tbl(id,ts) values(125, MeineFunktion('Neujahr 2020'));

etc

create or alter function MeineFunktion
(val varchar(80))
returns timestamp
as
declare variable res timestamp;
begin
if (val='heute') then res=current_date;
else
if (val='jetzt') then res=current_timestamp;
else
if (val containing 'Neujahr') then
begin
res=cast(replace(val,'Neujahr ','1.1.') as date);
end
else
res=val;
return res;
end

die üblichen formate kann firebird relativ gut, aber meine Erfahrung basiert zum Beispiel auf Import
von EMail Inhalten, wo der sender mal gerne schwachsinn einbaut, unter anderem kam da auch schon
utc+48 als Zeitzone oder 25:10 als Uhrzeit usw.

iIm falle einer exception kann man dann mit einer when any anweisung den ungültigen string
in eine extra protokoll tabelle packen und seine routine nach und nach verbessern.

ist aber vielleicht nicht das was du suchst, aber ein weg, das geschilderte Problem mit fb
zu lösen

Redeemer 19. Sep 2020 19:33

AW: Welches DateTime Format schluckt jede Datenbank?
 
Zitat:

Zitat von HeZa (Beitrag 1473754)
Zitat:

Zitat von Delphi.Narium (Beitrag 1473750)
...Geht dashier bei allen Datenbanken? W3Schools - SQL Working With Dates...

Ein Datum mit Uhrzeit im ISO-Format sollten eigentlich viele Datenbanken schlucken können (z.B. 2020-09-17 16:24:33).

Das Beispiel geht mit MSSQL nicht, denn ein Jahr hat keine 17 Monate. MSSQL akzeptiert das Beispiel ohne Striche als gültiges Datum, MySQL aber nicht. Was bei beiden geht, ist '2020-09-17T16:24:33'.

Bevor das jemand fragt: CURRENT_TIMESTAMP ist die einzige von MySQL und MSSQL akzeptierte Schreibweise für Jetzt.

generic 20. Sep 2020 00:20

AW: Welches DateTime Format schluckt jede Datenbank?
 
Zitat:

Zitat von Redeemer (Beitrag 1473880)
Zitat:

Zitat von HeZa (Beitrag 1473754)

Ein Datum mit Uhrzeit im ISO-Format sollten eigentlich viele Datenbanken schlucken können (z.B. 2020-09-17 16:24:33).

Das Beispiel geht mit MSSQL nicht, denn ein Jahr hat keine 17 Monate. MSSQL akzeptiert das Beispiel ohne Striche als gültiges Datum, MySQL aber nicht. Was bei beiden geht, ist '2020-09-17T16:24:33'.

Bevor das jemand fragt: CURRENT_TIMESTAMP ist die einzige von MySQL und MSSQL akzeptierte Schreibweise für Jetzt.

Also als String angegeben greifen die Ländereinstellungen bzw. die set FMT Einstellung bei dem MSSQL.
Daher gibt das als ODBC String an, wie ich oben bereits geschrieben hatte.

Code:
{ts'2020-09-17 16:24:33'}


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:43 Uhr.
Seite 3 von 3     123   

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