sql >> Databáze >  >> RDS >> Oracle

SQL:Je možné SUM() pole typu INTERVAL?

Obávám se, že budete mít smůlu s řešením, které funguje v Oracle i MSSQL. Aritmetika data je něco, co se u různých příchutí DBMS velmi liší.

Každopádně v Oracle můžeme data používat v jednoduché aritmetice. A máme funkci NUMTODSINTERVAL, která změní číslo na DAY TO SECOND INTERVAL. Pojďme je tedy dát dohromady.

Jednoduchá testovací data, dva řádky s páry dat zhruba dvanáct hodin od sebe:

SQL> alter session set nls_date_format = 'dd-mon-yyyy hh24:mi:ss'
  2  /

Session altered.

SQL> select * from t42
  2  /

D1                   D2
-------------------- --------------------
27-jul-2010 12:10:26 27-jul-2010 00:00:00
28-jul-2010 12:10:39 28-jul-2010 00:00:00

SQL>

Jednoduchý SQL dotaz pro zjištění součtu uplynulého času:

SQL> select numtodsinterval(sum(d1-d2), 'DAY')
  2  from t42
  3  /

NUMTODSINTERVAL(SUM(D1-D2),'DAY')
-----------------------------------------------------
+000000001 00:21:04.999999999

SQL>

Něco přes den, což bychom očekávali.

Práce se sloupci TIMESTAMP je trochu pracnější, ale stále můžeme pracovat se stejným trikem.

V následující ukázce. T42T je stejný jako T42, pouze sloupce mají jako datový typ TIMESTAMP místo DATE. Dotaz extrahuje různé komponenty DS INTERVAL a převede je na sekundy, které se pak sečtou a převedou zpět na INTERVAL:

SQL> select numtodsinterval(
  2              sum(
  3                  extract (day from (t1-t2)) * 86400
  4                   + extract (hour from (t1-t2)) * 3600
  5                   + extract (minute from (t1-t2)) * 600
  6                   + extract (second from (t1-t2))
  7            ), 'SECOND')
  8  from t42t
  9  /

NUMTODSINTERVAL(SUM(EXTRACT(DAYFROM(T1-T2))*86400+EXTRACT(HOURFROM(T1-T2))*
---------------------------------------------------------------------------
+000000001 03:21:05.000000000

SQL>

Alespoň tento výsledek je v kulatých sekundách!



  1. Jak zkontrolovat uživatelská oprávnění v MySQL Workbench pomocí GUI

  2. FLUTTER&PHP - Nemohu odesílat příspěvky do databáze mysql z mé aplikace flutter

  3. Laravel Schema Builder mění modul úložiště

  4. Vytvoření obecného OO ACL pomocí Doctrine