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

Jak najít rozdíl v hodnotách černobílého formátu TIMESTAMP v Oracle?

Výsledkem aritmetiky časového razítka je datový typ INTERVAL. Máte tam INTERVALOVÝ DEN DO DRUHÉ...

Pokud chcete počet minut, jedním ze způsobů by bylo použití EXTRACT() , například:

select extract( minute from interval_difference ) * 60 
        + extract( hour from interval_difference ) * 60
        + extract( day from interval_difference ) * 60 * 24
  from ( select systimestamp - (systimestamp - 1) as interval_difference
           from dual )

Případně můžete použít trik s daty:

select sysdate + (interval_difference * 1440) - sysdate
  from (select systimestamp - (systimestamp - 1) as interval_difference
          from dual )

„Triková“ verze funguje kvůli pořadí priority operátorů a rozdílům mezi aritmetikou data a časového razítka.

Zpočátku operace vypadá takto:

date + ( interval * number ) - date

Jak je uvedeno v dokumentaci:

Oracle vyhodnocuje výrazy uvnitř závorek před vyhodnocením výrazů vně.

První operace tedy provedla vynásobení intervalu 1 440. Interval, tj. diskrétní časový úsek, vynásobený číslem je další diskrétní časový úsek, viz dokumentace o datech a aritmetice intervalů. Takže výsledkem této operace je interval, takže nám zbývá:

date + interval - date

Operátor plus má zde přednost před mínusem. Důvodem může být to, že interval mínus datum je neplatná operace, ale z dokumentace také vyplývá, že tomu tak je (neříká to). První provedená operace je tedy datum + interval. Datum plus interval je datum. Zbývá jen

date - date

Podle dokumentace to má za následek celé číslo představující počet dní. Původní interval jste však vynásobili 1 440, takže to nyní představuje 1 440násobek počtu dnů, které by jinak měl. Zbývá vám počet sekund.

Stojí za zmínku, že:

Když intervalové výpočty vrátí hodnotu datetime, výsledkem musí být skutečná hodnota datetime nebo databáze vrátí chybu. Například následující dva příkazy vrátí chyby:

Metoda "trik" bude selže, zřídka, ale stále selže. Jako vždy je nejlepší to udělat pořádně.



  1. Zkontrolujte, zda v poli Postgres existuje hodnota

  2. Pokus o nasazení aplikace Oracle-ADF na Tomcat 7

  3. 2 způsoby, jak vrátit kód ASCII pro danou postavu v MariaDB

  4. Dotaz na prvek pole ve sloupci JSON