Convierta la diferencia entre dos columnas de marca de tiempo en segundos en Oracle

El SQL original es el siguiente, la última columna es la diferencia horaria. Pero necesito convertirlo en segundos para estadísticas posteriores.

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

El primer método es un método preciso, que extrae las horas, los minutos y los segundos y luego los acumula:

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;

El segundo método es un método aproximado, sin el número de segundos después del punto decimal, pero también es aceptable aquí.

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

Al final, todavía usé el método 1. Tenga en cuenta que la cláusula WITH...AS anterior, que es la expresión de tabla común (CTE) de Oracle, es muy concisa.

referencia

  • 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

Supongo que te gusta

Origin blog.csdn.net/stevensxiao/article/details/130546124
Recomendado
Clasificación