Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle еквивалент на java System.currentTimeMillis()?

Функцията Java връща броя милисекунди, които са изминали от фиксиран момент във времето. Това време е полунощ на първия ден от 1970 UTC, т.е. началото на часовника на Unix.

Следната функция прави същото за PL/SQL. Той изважда текущото времево клеймо от началната точка (където ms=1). Той извлича различните компоненти на времето и ги превръща в секунди. Накрая умножава всичко по 1000, за да получи стойността в милисекунди:

create or replace function current_millisecs 
    return number 
is
    base_point constant timestamp := to_timestamp('01-JAN-1970 00:00:00.000');
    now constant timestamp := systimestamp AT TIME ZONE 'UTC' ;
begin
    return (
                  ((extract(day    from (now-base_point)))*86400)
                + ((extract(hour   from (now-base_point)))*3600)
                + ((extract(minute from (now-base_point)))*60)
                + ((extract(second from (now-base_point))))
           ) * 1000;
end;
/

Ако сте активирали Java в базата данни, може да намерите по-лесно вместо това да създадете съхранена процедура на Java:

create or replace function currentTimeMillis return number as
language java name 'java.lang.System.currentTimeMillis() return java.lang.Integer';
/

Сравнение на двата подхода:

SQL> select currentTimeMillis as JAVA
  2         , current_millisecs as PLSQL
  3         , currentTimeMillis - current_millisecs as DIFF
  4  from dual
  5  /

      JAVA      PLSQL       DIFF
---------- ---------- ----------
1.2738E+12 1.2738E+12          0

SQL>

(Моите благодарности отиват на Саймън Никерсън, който забеляза правописната грешка в предишната версия на моята PL/SQL функция, която доведе до аномален резултат.)

Между другото, ако се интересувате само от времето до най-близката сантисекунда, Oracle има вграден за това:DBMS_UTILITY.GET_TIME() .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да добавите специален знак в Oracle SQL, когато се намери точно съвпадение в колоната

  2. Предайте параметри от партиден файл към sqlplus скрипт

  3. PIVOT Oracle - преобразувайте данни от няколко реда в един ред с множество колони, без обобщени данни

  4. Как се вмъкват два реда?

  5. Изберете втората минимална стойност в Oracle