Convertir la différence entre deux colonnes d'horodatage en secondes dans Oracle

Le SQL d'origine est le suivant, la dernière colonne est la différence de temps. Mais je dois le convertir en secondes pour les statistiques suivantes.

SELECT
    MIN(timestamp)                  AS start_pop_time,
    MAX(timestamp)                  AS finish_pop_time,
    MAX(timestamp) - MIN(timestamp) time_taken
FROM
    gv$im_header;

START_POP_TIME                      FINISH_POP_TIME                     TIME_TAKEN         
----------------------------------- ----------------------------------- -------------------
07-5-23 10.24.06.447421000 上午 GMT 07-5-23 10.27.00.696010000 上午 GMT +00 00:02:54.248589

La première méthode est une méthode précise, qui extrait les heures, les minutes et les secondes puis les accumule :

WITH rws AS (
    SELECT
        MIN(timestamp) AS t1,
        MAX(timestamp) AS t2
    FROM
        gv$im_header
)
SELECT
    EXTRACT(HOUR FROM(t2 - t1)) * 60 * 60 + EXTRACT(MINUTE FROM(t2 - t1)) * 60 + EXTRACT(SECOND FROM(t2 - t1)) AS pop_elap_secs
FROM
    rws;

WITH rws AS (
    SELECT
        MIN(timestamp) AS t1,
        MAX(timestamp) AS t2
    FROM
        gv$im_header
)
SELECT
    EXTRACT(HOUR FROM(t2 - t1)) * 60 * 60 + EXTRACT(MINUTE FROM(t2 - t1)) * 60 + EXTRACT(SECOND FROM(t2 - t1)) AS pop_elap_secs
FROM
    rws;

La deuxième méthode est une méthode approchée, sans le nombre de secondes après la virgule décimale, mais elle est également acceptable ici.

WITH rws AS (
    SELECT
        MIN(timestamp) AS t1,
        MAX(timestamp) AS t2
    FROM
        gv$im_header
)
SELECT
    ( CAST(t2 AS DATE) - CAST(t1 AS DATE) ) * 86400 AS pop_elap_secs
FROM
    rws;

POP_ELAP_SECS
-------------
          174

Au final j'ai quand même utilisé la méthode 1. Notez que la clause WITH...AS ci-dessus, qui est la CTE (Common Table Expression) d'Oracle, est très concise.

référence

  • https://asktom.oracle.com/pls/apex/f%3Fp%3D100:11:0::::P11_QUESTION_ID:9533863800346031904
  • https://jeffkemponoracle.com/2010/10/difference-between-two-timestamps/
  • https://stackoverflow.com/questions/11617962/calculating-difference-between-two-timestamps-in-oracle-in-milliseconds

Guess you like

Origin blog.csdn.net/stevensxiao/article/details/130546124