2017-10-18 8 views
2

Je souhaite ajouter des millisecondes à mon objet d'horodatage. Par exemple, je dois incrémenter la valeur d'horodatage de 25 millisecondes.Oracle: ajouter des millisecondes à mon objet timestamp

Je pris cela comme un exemple

select to_char(systimestamp,'dd-mm-yyyy hh24:mi:ss.FF') as ts 
, to_timestamp(to_char(sysdate,'dd-mm-yyyy hh24:mi:ss.')||to_char(to_number(to_char(systimestamp,'FF')) + 250) 
,'dd-mm-yyyy hh24:mi:ss.FF') as ts_1 
from dual; 

cela fonctionne et augmente millisecondes. Mais cela n'affecte pas le champ des secondes. Par exemple, si nous ajoutons 1000 millisecodes alors idéalement le champ secondes devrait être incrémenté. Nous savons qu'il est possible de convertir un horodatage en millisecondes. Est-il possible de convertir les millisecondes en horodatage? Ou s'il y a un moyen d'ajouter des millisecondes à l'objet timestamp qui reflète les changements en secondes déposés?

Répondre

4

Vous ajoutez le temps à un horodatage en ajoutant un intervalle. Les intervalles peuvent descendre en secondes seulement, mais un intervalle de 0.001 secondes est un intervalle de millisecondes que vous pouvez multiplier avec la valeur désirée. E.g:

select systimestamp + interval '0.001' second * :millisecs from dual; 
2

Utiliser un intervalle littéral:

SELECT SYSTIMESTAMP + INTERVAL '0.025' SECOND 
FROM DUAL 

ou créer dynamiquement un intervalle avec NUMTODSINTERVAL:

SELECT SYSTIMESTAMP + NUMTODSINTERVAL(25/1000, 'SECOND') 
FROM DUAL 

ou, avec une variable de liaison:

SELECT SYSTIMESTAMP + NUMTODSINTERVAL(:milliseconds/1000, 'SECOND') 
FROM DUAL