IT-Beratung, Entwicklung, Systemanalyse
 

Oracle-Date in einen Unix-Timestamp wandeln

Frage
Wie wandelt man einen Oracle-Timestamp in einen (aus Unix bekannten) Zeitstempel als Long in Millisekunden seit 01.01.1970 um?
Antwort
Mit z.B. tsToUnixMS(), wie in select systimestamp, tsToUnixMS(systimestamp) as ms from dual; Dabei wird aus z.B. "23-OCT-07 11.31.26.777834 AM +02:00" der Long-Wert "1193139086777". Ist kein tsToUnixMS() zur Hand? Einfach selbst definieren:
CREATE OR REPLACE FUNCTION tsToUnixMS(datets in timestamp) RETURN number
IS
  datum date := cast (datets as date);
BEGIN
  return trunc(to_char(datets, '.FF') + 1000 *
    (24*60*60 * (datum - to_date('19700101', 'yyyymmddhh24miss'))));
END;