FROM_UNIXTIME Ersatz in ORACLE?

Hallo,

alles lesen hat bisher nichts gebracht, daher meine Frage:

Ich suche eine Oracle Lösung für

MySQL: SELECT FROM_UNIXTIME(time,’%m.%Y’) as month…

wo ein Unixtimestamp (Format Number) nach MM.YY gewandelt wird.

in time ist bspw. 1074754194 abgelegt

Es gibt zwar in Oracle Datumsformate mit Augabeformatierung aber vorerst muss das Number-Format der Sekunden seit 1970 in ein Datums/Time-Format gewandelt werden was Oracle versteht.

Mfg Andreas

Hallo Andreas!

Müsste so stimmen:

SELECT to\_date('01.01.1970 00:00:00','DD.MM.YYYY HH24:MI:SS') + x/86400
FROM dual;

wobei du für x natürlich deinen Unix-Timestamp eintragen musst.

in time ist bspw. 1074754194 abgelegt

Ich krieg da 22.01.2004 06:49:54 raus.

Stimmt’s?

Gruß,
Martin

Hallo Martin,
danke erstmal für die schnelle Antwort. Habs probiert und sieht schon mal gut aus.
Jedoch spielt es mit dem Rest nicht so zusammen.
Ziel Timestamps nach Tageszeiten (Stundegruppierung) zu zählen.

MYSQL:
SELECT FROM_UNIXTIME(time,’%H:00 - %H:59’) as hour, count(*) AS count FROM $table_data
WHERE $table_data.time>$time_from AND $table_data.time1074654225 AND pss_pag_data.pss_time1074654225 AND pss_pag_data.pss_time[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Andreas!

Ziel Timestamps nach Tageszeiten (Stundegruppierung) zu
zählen.

Tageszeit | Count
00:00 - 00:50 | 12212
01:00 - 01:59 |232

und genau das brauche ich in oracle:

Meine Query (geht nicht da nicht nach hour gruppiert werden
kann)

SELECT TO_CHAR(to_date(‚01.01.1970 00:00:00‘,‚DD.MM.YYYY
HH24:MI:SS‘) + pss_pag_data.pss_time/86400,‚HH24‘) as hour,
count(*) AS count FROM dual, pss_pag_data WHERE
pss_pag_data.pss_time>1074654225 AND
pss_pag_data.pss_timeSELECT TO_CHAR(to_date(‚01.01.1970 00:00:00‘,‚DD.MM.YYYY HH24:MI:SS‘) +

pss_pag_data.pss_time/86400,‚HH24‘) as hour,
count(*) AS count
FROM pss_pag_data
WHERE pss_pag_data.pss_time>1074654225 AND
pss_pag_data.pss_timeSieht bei mir dann so aus (mit irgendwelchen Daten natürlich):

HOUR COUNT
-------------
03 3
08 2

Wenn du auf der hübschen Formatierung wie in MySQL bestehst, dann machst du noch diesen hier:

SELECT hour||':00-'||hour||':59', count
FROM ;

(den habe ich jetzt aber nicht ausprobiert…)

Oder habe ich da jetzt immer noch was falsch verstanden?

Gruß,
Martin

Hallo Martin,
ich war ein paar Tage weg und habe jetzt endlich die Lösung.
Danke nochmal.
Habe jetzt auch das Oracle-Prinzip verstanden, und kann damit auch nach Tagen, Monaten usw. abfragen.

Vieleicht noch ein Rat?

wenn ich nach Datum abfrage bspw. TT.MM.YYYY als String dann wird ja immer fortlaufend (erst der Tag) sortiert:
21.01.2004
22.01.2004
25.04.2003
27.01.2003

daher mache ich es momentan umgekehrt YYYY-MM-TT (ist richtig sortiert):
2003-01-27
2003-04-25
2004-01-21
2004-01-22

und wandle dann den Datums-String (PHP) jeweils ins richtige Format TT.MM.YYYY

Kann man das auch kurz und elegant schon in der Query tun?

SELECT TO_CHAR(to_date(‚01.01.1970 00:00:00‘,‚DD.MM.YYYY HH24:MI:SS‘) + oratestdevelop.pss_pag_data.pss_time/86400,‚YYYY-MM-DD‘) as day,count(*) AS count FROM oratestdevelop.pss_pag_data GROUP BY TO_CHAR(to_date(‚01.01.1970 00:00:00‘,‚DD.MM.YYYY HH24:MI:SS‘) + oratestdevelop.pss_pag_data.pss_time/86400,‚YYYY-MM-DD‘)ORDER BY day ASC;

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Andreas!

wenn ich nach Datum abfrage bspw. TT.MM.YYYY als String dann
wird ja immer fortlaufend (erst der Tag) sortiert:
21.01.2004
22.01.2004
25.04.2003
27.01.2003

Eigentlich wird immer nach dem ORDER BY sortiert. Das wiederum muss nicht zwangsläufig ein Teil der Spalten im SELECT sein, allerdings muss der ORDER BY wiederum Teil von GROUP BY sein.

Kann man das auch kurz und elegant schon in der Query tun?

Ja, musst nur die richtige ORDER BY angeben…

Gruß,
Martin