Saltar al contenido

oracle systimestamp (sysdate) en milisegundos

Solución:

  • Independiente de la zona horaria de DB
  • con milisegundos
  • funciona en XE
    function current_time_ms
        return number
    is
        out_result number;
    begin
        select extract(day from(sys_extract_utc(systimestamp) - to_timestamp('1970-01-01', 'YYYY-MM-DD'))) * 86400000 
            + to_number(to_char(sys_extract_utc(systimestamp), 'SSSSSFF3'))
        into out_result
        from dual;
        return out_result;
    end current_time_ms;

Lo mejor que conozco es:

select extract(day    from (systimestamp - timestamp '1970-01-01 00:00:00')) * 86400000
     + extract(hour   from (systimestamp - timestamp '1970-01-01 00:00:00')) * 3600000
     + extract(minute from (systimestamp - timestamp '1970-01-01 00:00:00')) * 60000
     + extract(second from (systimestamp - timestamp '1970-01-01 00:00:00')) * 1000 unix_time
from dual;

No estoy muy seguro de qué requisitos tiene con respecto a la zona horaria. Es posible que deba hacer pequeños ajustes para eso.

Añadiendo a la respuesta de @Mykhaylo Adamovych (¡que parece correcta!), Aquí hay un enfoque más sencillo utilizando el soporte de Oracle Java (es decir, no en XE ni en AWS RDS). Menos portátil (en caso de que le importe), pero parecía más rápido en mi pruebas.

CREATE or replace FUNCTION current_java_timestamp RETURN number
AS LANGUAGE JAVA NAME 'java.lang.System.currentTimeMillis() return java.lang.Long';
/
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *