sql >> Database teknologi >  >> RDS >> Oracle

Sådan konverteres talformat af en beregnet kolonne til tidsformat (tt:mm:ss), sql-forespørgsel

En funktion gør det smukkere. Det returnerer antal dage formateret som dd:hh:mi:ss .

SQL> create or replace function f_days2ddhhmiss (par_broj_dana in number)
  2     return varchar2
  3  is
  4     l_broj_dana  number := par_broj_dana;
  5     retval       varchar2 (20);
  6  begin
  7     with podaci
  8          as (select trunc (l_broj_dana) broj_dana,
  9                     round (mod (l_broj_dana * 24, 24), 2) broj_sati,
 10                     round (mod (l_broj_dana * 24 * 60, 60), 2) broj_minuta,
 11                     round (mod (l_broj_dana * 24 * 60 * 60, 60), 2)
 12                        broj_sekundi
 13                from dual)
 14     select    lpad (p.broj_dana, 2, '0')
 15            || ':'
 16            || lpad (trunc (p.broj_sati), 2, '0')
 17            || ':'
 18            || lpad (trunc (p.broj_minuta), 2, '0')
 19            || ':'
 20            || lpad (trunc (p.broj_sekundi), 2, '0')
 21       into retval
 22       from podaci p;
 23
 24     return retval;
 25  end f_days2ddhhmiss;
 26  /

Function created.

Eksempel:

Uden det får du et decimaltal:

SQL> select to_date('07.08.2020 14:25', 'dd.mm.yyyy hh24:mi:ss')
  2       - to_date('03.08.2020 13:20', 'dd.mm.yyyy hh24:mi:ss') result
  3  from dual;

    RESULT
----------
4,04513889

Med den får du, hvad du ønskede:

SQL> select f_days2ddhhmiss(to_date('07.08.2020 14:25', 'dd.mm.yyyy hh24:mi:ss')
  2                       - to_date('03.08.2020 13:20', 'dd.mm.yyyy hh24:mi:ss')
  3                        ) result
  4  from dual;

RESULT
--------------------------------------------------------------------------------
04:01:05:00

SQL>

Ja, en sådan (eller lignende) kode kan bruges direkte i SQL, men den laver en SELECT udsagn slags grimt og svær at læse.

Din forespørgsel ville så være

SELECT m.numos,
       m.codfuncos,
       m.dtinicioos,
       m.dtfimseparacao,
       f_days2ddhhmiss (m.dtfimseparacao - m.dtinicioos) AS tempo
  FROM pcmovendpend m
 WHERE     dtfimseparacao IS NOT NULL
       AND data >= SYSDATE - 1

Se om det hjælper.



  1. Oracle dato ser ud til at være lig

  2. Generisk Killed-fejl i PHP-script

  3. Hvordan ændrer jeg standardindstillingerne for en mysql-tabelkolonne?

  4. Hvad er datatypen for unix_timestamp (MySQL)?