Differenz zwischen Zeitstempel (number) und Systemzeit

Status
Für weitere Antworten geschlossen.
M

mbergien

Guest
Hallo,

ich verzweifle gerade an folgendem:
Ich habe ein Feld vom Datentypen Number in dem '1522299320729' steht. (1522299320 => 29.03.2018 04:55:20). Nun möchte ich prüfen ob das jünger ist als 25h, also etwas wie:
SELECT name, started FROM processes WHERE started > [Systemzeit]-25h;

Beste Grüße,
M.
 
Werbung:
Code:
test=*# select to_timestamp(1522299320.729) > now() - '25hours'::interval;
 ?column?
----------
 t
(1 Zeile)

Warum verwendet man so krude Dinge? Auch Oraggle hat für Timestamps passende Werte, mit denen sich besser rechnen läßt. Offenbar habt ihr ja sogar vergessen, daß die Zeit da in Sekunden seit EPOCH und dazu noch mal 1000 steht. Dazu kommen weitere Probleme mit Sommer/Winterzeitberechnung.
 
Code:
test=*# select to_timestamp(1522299320.729) > now() - '25hours'::interval;
?column?
----------
t
(1 Zeile)
Danke für die schnelle Antwort aber das hilft mir so noch nicht weiter.
Wie bekomme ich nun 1522299320 zu 1522299320.729 um die Abfrage zu verwenden?
select to_timestamp(started) from processess; führt zu einem Fehler:
ORA-00932: Inkonsistente Datentypen: - erwartet, NUMBER erhalten
00932. 00000 - "inconsistent datatypes: expected %s got %s"
Warum verwendet man so krude Dinge? Auch Oraggle hat für Timestamps passende Werte, mit denen sich besser rechnen läßt. Offenbar habt ihr ja sogar vergessen, daß die Zeit da in Sekunden seit EPOCH und dazu noch mal 1000 steht. Dazu kommen weitere Probleme mit Sommer/Winterzeitberechnung.

Glaube mir: die Frage habe ich mir auch schon gestellt. Schau in den Quelltext der Software und Du stellst Dir ganz andere Fragen. Aber das alles hilft uns nicht weiter. Es ist so wie es ist und ich muss damit arbeiten.
 
Zuletzt bearbeitet von einem Moderator:
Du hast eingangs '1522299320729' gebracht, das wäre im Jahre 50209:

Code:
test=*# select to_timestamp(1522299320729);
  to_timestamp   
--------------------------------
 50209-09-30 04:25:28.999936+02
(1 Zeile)

test=*# select to_timestamp(15222993207.29);
  to_timestamp   
---------------------------
 2452-05-25 03:13:27.29+02
(1 Zeile)

test=*# select to_timestamp(1522299320.729);
  to_timestamp   
----------------------------
 2018-03-29 06:55:20.729+02
(1 Zeile)

also einfach 3 Stellen abschneiden oder durch 1000 dividieren.
 
Weil das meist von bestehender Software so vorgegeben wird und nicht mit einem Federstrich geändert werden kann. Ich glaube nicht, dass wir das in jedem einzelnen Thread in diesem Forum immer wieder aufs Neue diskutieren müssen.

Mag sein, mir stellt sich dennoch die Frage immer wieder ;-)
 
Du hast eingangs '1522299320729' gebracht, das wäre im Jahre 50209:

Code:
test=*# select to_timestamp(1522299320729);
  to_timestamp  
--------------------------------
50209-09-30 04:25:28.999936+02
(1 Zeile)

test=*# select to_timestamp(15222993207.29);
  to_timestamp  
---------------------------
2452-05-25 03:13:27.29+02
(1 Zeile)

test=*# select to_timestamp(1522299320.729);
  to_timestamp  
----------------------------
2018-03-29 06:55:20.729+02
(1 Zeile)

also einfach 3 Stellen abschneiden oder durch 1000 dividieren.

select to_timestamp(started/1000) from processes; ergibt
ORA-00932: Inkonsistente Datentypen: - erwartet, NUMBER erhalten
00932. 00000 - "inconsistent datatypes: expected %s got %s"

Ich denke to_timestamp hilft hier nicht weiter.
 
Gut, ich habe PostgreSQL:

Code:
test=*# select to_timestamp(1522299320729/1000);
  to_timestamp   
------------------------
 2018-03-29 06:55:20+02
(1 Zeile)

In was liegt das vor, INT, BIGINT, TEXT? Eventuell mußt Du nur das started/1000 nach INT casten und es geht. Oder via Stringfunktionen die letzten 3 Ziffern abschneiden.

Erwähnte ich schon, daß bessere Datentypen diese Probleme nicht hätten? ;-)
 
Gut, ich habe PostgreSQL:

Code:
test=*# select to_timestamp(1522299320729/1000);
  to_timestamp  
------------------------
2018-03-29 06:55:20+02
(1 Zeile)

In was liegt das vor, INT, BIGINT, TEXT? Eventuell mußt Du nur das started/1000 nach INT casten und es geht. Oder via Stringfunktionen die letzten 3 Ziffern abschneiden.

Erwähnte ich schon, daß bessere Datentypen diese Probleme nicht hätten? ;-)

Erstens: ich hatte bereits geschrieben, dass der Datentyp Number ist.
Zweitens: ich hatte bereits mehrere Fehlermeldungen gepostet, die genau das untermauern
Drittens: ICH habe die Datenbank nicht designt und sie liegt nun vor wie designt. ICH werde den Datentyp des Feldes nicht ändern.
Viertens: Statt das mir diese Posts irgendwie geholfen hätten, muss ich mich mit blöden Kommentaren rumärgern und das ist der Grund, warum ich mich hier wieder abmelden werde!

Vielen Dank für nichts.

Übrigens: die Lösung für mein Problem heisst timestamptointeger. Das habe ich an anderer Stelle erfahren dürfen.
 
Werbung:
@mbergien Bitte nicht pampig werden wenn man von anderen Hilfe möchte. Überdies geht es um eine simple Datentypkonvertierung und @akretschmer hat Dir genügend Hinweise zu dem Thema gegeben.
Thema geschlossen.
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben