Seite 1 von 1

Timestamp im select

Verfasst: So, 21. Feb 2021 1:20
von Werner_Bayern
Servus,

ein select() auf ein Timestamp-Feld liefert mir einen String ohne "-" zurück, obwohl der Wert so in der Tabelle gespeichert ist. Das Feld hab ich korrekt als timestamp with time zone angelegt, PGAdmin zeigt es korrekt an.

Leider hilft das auch nichts:

Code: Alles auswählen

select letzter_import::timestamp from ...

Re: Timestamp im select

Verfasst: So, 21. Feb 2021 10:30
von ramses
Hallo Werner

Vielleicht kommt die PGDBE damit nicht zurecht.

timestamp ist in PG ein teilweise reservierter Name in anderen Standards ist er Total reserviert.
Versuche es doch mal mit einem cast

Re: Timestamp im select

Verfasst: So, 21. Feb 2021 10:47
von Marcus Herz
Hallo Werner
Der Speichertyp eines TIMESTAMP ist 8 byte, UTC, sagt aber nichts über eine Formatierung aus. In der C API kommt er ohne Formatierungskennzeichen. Wie greifst du den Inhalt des Feldes ab?
In SQL Syntax gilt JJCC-MM-DD Formatierung

Vermutlich führt pgAdmin eine Formatierung auf Basis der Ländereinstellung durch

Re: Timestamp im select

Verfasst: So, 21. Feb 2021 15:39
von Werner_Bayern
Servus,

Danke. Ich habs doch auch schon mit einem cast versucht, siehe 1. Beitrag.

Abfrage mittels Pass Through. Ist halt komisch, weil ich den Wert selber reinschreibe und beim Auslesen erscheint er dann anders.

Hier ein Beispiel, so wird er korrekt in PGAdmin angezeigt:
test.JPG
test.JPG (4 KiB) 3584 mal betrachtet
und so kommt er in Xbase an:

Code: Alles auswählen

"20210219 00013401"
Die Abfrage mache ich so:

Code: Alles auswählen

select letzter_import::timestamp with time zone from ...
Werde es an Alaska melden.

Re: Timestamp im select

Verfasst: So, 21. Feb 2021 19:46
von Marcus Herz
Das ist wahrscheinlich schon richtig, kein Fehler, ich glaube nicht dass ::timestamp eine Formatierung durchführt. Und Alaska kennt keinen type Timestamp, den es formatieren könnte. Aber dazu kenn ich die PGDBE zu wenig.

Re: Timestamp im select

Verfasst: So, 21. Feb 2021 21:00
von Werner_Bayern
Servus Marcus,

doch, doch: ::timestamp with time zone bewirkt eine andere Rückgabe als nur ::timestamp. Und lt. Hilfe kennt Xbase++ schon den Datentyp timestamp "T".
Ich kann ja mit dem "falschen" Rückgabewert nicht sicher sein, ob meine Abfragen damit dann korrekt sind. Zwischenzeitlich helfe ich mir einfach mit der Funktion

Code: Alles auswählen

///<summary>
///  <para> Falschen TimeStamp aus select mit timezone wieder korrekt formatieren für select-Abfrage  </para>
///  <para> 20210219 00013401 umwandeln in ISO Form YYYY-MM-TT HH:MM:SS+TS </para>
///</summary>
   FUNCTION tsfalsch(cTS)
   RETURN (left(cTs, 4) + "-" + substr(cTS, 5, 2) + "-" + substr(cTS, 7, 2) + substr(cTS, 9, 3) + ":" + substr(cTS, 12, 2) + ":" +;
   substr(cTS, 14, 2) + "+" + substr(cTS, 16))

Re: Timestamp im select

Verfasst: Mo, 22. Feb 2021 8:38
von Marcus Herz
Hallo Werner
weiß nicht, ob das schenller ist, nur eine Stingoperation

Code: Alles auswählen

tran("20201231131500pm", "@R 9999-99-99 99:99:99+AAA")

Re: Timestamp im select

Verfasst: Mo, 22. Feb 2021 21:14
von Werner_Bayern
Danke, an transform() hätte ich nie gedacht.