Timestamp im select

Hier dreht es sich um den PostGre Server

Moderator: Moderatoren

Antworten
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1843
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 6 Mal
Danksagung erhalten: 16 Mal

Timestamp im select

Beitrag 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 ...
es grüßt

Werner

<when the music is over, turn off the lights!>
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2091
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 7 Mal
Danksagung erhalten: 22 Mal

Re: Timestamp im select

Beitrag 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
Zuletzt geändert von ramses am So, 21. Feb 2021 10:51, insgesamt 1-mal geändert.
Valar Morghulis

Gruss Carlo
Benutzeravatar
Marcus Herz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 314
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 4 Mal
Danksagung erhalten: 39 Mal
Kontaktdaten:

Re: Timestamp im select

Beitrag 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
Gruß Marcus

Es gibt keine Grenzen, aber du kannst welche ziehen.
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1843
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 6 Mal
Danksagung erhalten: 16 Mal

Re: Timestamp im select

Beitrag 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) 180 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.
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Marcus Herz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 314
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 4 Mal
Danksagung erhalten: 39 Mal
Kontaktdaten:

Re: Timestamp im select

Beitrag 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.
Gruß Marcus

Es gibt keine Grenzen, aber du kannst welche ziehen.
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1843
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 6 Mal
Danksagung erhalten: 16 Mal

Re: Timestamp im select

Beitrag 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))
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Marcus Herz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 314
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 4 Mal
Danksagung erhalten: 39 Mal
Kontaktdaten:

Re: Timestamp im select

Beitrag 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")
Gruß Marcus

Es gibt keine Grenzen, aber du kannst welche ziehen.
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1843
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 6 Mal
Danksagung erhalten: 16 Mal

Re: Timestamp im select

Beitrag von Werner_Bayern »

Danke, an transform() hätte ich nie gedacht.
es grüßt

Werner

<when the music is over, turn off the lights!>
Antworten