Angenommen, die TIMESTAMP-Spalte ist wirklich in Sekunden, Ihr Code ist fast richtig. Allerdings: to_date('1970-01-01', 'yyyy-mm-dd')
ist richtig, aber dazu müssen Sie eine Nummer hinzufügen - schlicht und einfach. Das ist: + TIMESTAMP/60/60/24
. Genau so!
Oder, um Rundungsfehler zu vermeiden, könnten Sie so etwas wie
to_date('1970-01-01', 'yyyy-mm-dd') + interval '1' second * test1.timestamp
Hinweis tun, dass der Termin auch Schließlich
date '1970-01-01'
einfach als geschrieben werden kann: Wenn Sie das Datum speichern möchten Teil, wickeln Sie das Ergebnis dieser Addition innerhalb TRUNC(...)
- die auf den Anfang des Tages verkürzt. Oder Sie können den arithmetischen Ausdruck ohne INTERVAL
und ohne TRUNC
verwenden, aber stattdessen fügen Sie TRUNC(TEST1.TIMESTAMP)/60/60/24
hinzu - das wird die Sekunden auf eine ganze Anzahl von Tagen abschneiden.
Beachten Sie, dass Datumsangaben in Oracle kein "Format" haben (Format gilt nur für Textdarstellungen von Daten, nicht für Daten selbst).
BEARBEITEN: Es scheint, dass Sie auch Hilfe mit der INSERT-Anweisung benötigen. Wenn Sie mit Daten aus einer anderen Tabelle in eine Tabelle einfügen, fügen Sie nicht INSERT ... VALUES ein, Sie INSERT ... SELECT. So etwas wie (Ihr schlecht gewählte Spaltennamen - schlecht gewählt, weil sie Oracle Schlüsselwörter sind):
insert into test2 (timestamp, time)
select timestamp, date '1970-01-01' + trunc(timestamp/60/60/24)
from test1
;
Hinweis, dass es keine Anrufe auch immer entweder TO_CHAR oder TO_DATE; und es gibt kein Formatmodell wie 'JJJJ-MM-TT'. Eine der guten Eigenschaften des SQL-Standard-Datumsliterals date '1970-01-01'
ist, dass nur ein Format akzeptiert wird: 'yyyy-mm-dd'
(selbst die Bindestriche sind obligatorisch; /
würde abgelehnt).
Wenn Sie sehen wollen, was jetzt in der Tabelle TEST2 ist:
select timestamp, time from test2;
Und wenn Sie nicht mögen, wie das Datum angezeigt wird, können Sie das steuern kann:
select timestamp, to_char(time, 'yyyy-mm-dd') as time from test2;
Was gezeigt wird in Klammern SOLLTE der Datentyp sein. Ist der Datentyp von "TEST1" tatsächlich "TIMESTAMP"? (Sind Sie 100% sicher? Wenn nicht, können Sie den Befehl 'DESCRIBE' verwenden, um das herauszufinden.) Ich frage, weil Sie sagten, die Tabelle" enthält einen Zeitstempel ** Nummer ** 'TEST1 (TIMESTAMP)'. " Der Datentyp 'Zeitstempel' ist keine ** Nummer **. Welcher Teil ist richtig und welcher ist falsch? Die Antwort auf Ihre Frage hängt entscheidend davon ab, also bitte klären Sie dies zuerst. – mathguy
Sie verwenden SAP mit einer Oracle-Datenbank? Und vom Zeitstempel entfernst du die Zeit, um das Datum zu erhalten, aber du nennst diese Spalte "Zeit"? Seltsam. Wie auch immer, benutze 'TRUNC', um den Datumsteil eines Zeitstempels zu erhalten. –
@mathguy es war nur ein Beispiel, das Timestamp-Feld ist eine Zahl, die große Zahlen enthält, die in Sekunden sind, aber der Feldtyp ist immer noch in NUMBER (20), –