Pourriez-vous fournir l'implémentation de la fonction stockée pour obtenir la variable systimestamp
actuelle en millisecondes.
Quelque chose que je peux utiliser comme
select current_time_ms from dual;
et obtenez la différence, en millisecondes, entre l'heure actuelle et minuit, le 1er janvier 1970 UTC.
Merci.
fonction current_time_ms numéro de retour est out_result number; commencer sélectionnez extrait (jour de (sys_extract_utc (systimestamp)) - to_timestamp ('1970-01-01,' AAAA-MM-JJ '))) * 86400000. + to_number (to_char (sys_extract_utc (horodatage système), 'SSSSSFF3'))) en out_result de dual; return out_result; end current_time_ms;
La meilleure chose que je connaisse est:
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;
Je ne suis pas tout à fait sûr de vos exigences concernant le fuseau horaire. Vous devrez peut-être faire des ajustements mineurs pour cela.
Ajouter à la réponse de @Mykhaylo Adamovych (ce qui semble correct!) Est une approche plus simple utilisant le support Oracle Java (c'est-à-dire pas dans XE ni dans AWS RDS). Moins portable (au cas où vous l'aimeriez), mais semblait plus rapide dans mon test.
CREATE or replace FUNCTION current_Java_timestamp RETURN number
AS LANGUAGE Java NAME 'Java.lang.System.currentTimeMillis() return Java.lang.Long';
/
Le code ci-dessous indique la différence en millisecondes:
with t as (select systimestamp - to_timestamp(sysdate ) diff from dual)
select extract(day from diff) * 24 * 3600000+
extract(hour from diff) * 3600000+
extract(minute from diff) * 60000 +
extract(second from diff) * 1000
dif
from t
Pour la conversion de millisecondes en heures, minutes, secondes, modifiez et utilisez la requête ci-dessous, selon le cas:
with t as (select systimestamp - to_timestamp(sysdate ) diff from dual)
select extract(day from diff) * 24 * 3600000+
extract(hour from diff) * 3600000+
extract(minute from diff) * 60000 +
extract(second from diff) * 1000
dif,
(to_char (to_date(round(( extract(day from diff) * 24 * 3600000+
extract(hour from diff) * 3600000+
extract(minute from diff) * 60000 +
extract(second from diff) * 1000)/1000), 'SSSSS' ), 'HH24"Hrs" MI"Min" SS"Sec"')) timeval
from t
Autant que je sache, il n’existe aucun moyen direct d’y parvenir (autre que l’écriture manuelle d’une fonction SQL longue durée).
Pourquoi avez-vous besoin de cela spécifiquement?
Vous pouvez utiliser une fonction Java stockée, puis le System.getCurrentMillis () fourni par Java pour vous renvoyer une valeur en millisecondes allant du 1.1.1970 à maintenant.