Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да намеря разлика между стойностите на формата TIMESTAMP в Oracle?

Резултатът от аритметиката на времевата марка е тип данни INTERVAL. Имате ИНТЕРВАЛЕН ДЕН ДО ВТОРИ там...

Ако искате броя на минутите, единият начин би бил да използвате EXTRACT() , например:

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 )

Като алтернатива можете да използвате трик с дати:

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

Версията "трик" работи поради реда на приоритета на оператора и разликите между аритметиката за дата и време.

Първоначално операцията изглежда така:

date + ( interval * number ) - date

Както е посочено в документацията:

Oracle оценява изразите в скоби, преди да оценява тези извън.

И така, първата операция я извърши, за да умножи интервала по 1440. Един интервал, т.е. дискретен период от време, умножен по число, е друг дискретен период от време, вижте документацията за дата и време и интервална аритметика. И така, резултатът от тази операция е интервал, оставяйки ни с:

date + interval - date

Тук операторът плюс има предимство пред минус. Причината за това може да е, че интервал минус дата е невалидна операция, но документацията също предполага, че това е така (не излиза и не го казва). И така, първата извършена операция е дата + интервал. Дата плюс интервал е дата. Напускане само

date - date

Според документацията това води до цяло число, представляващо броя на дните. Въпреки това, вие умножихте първоначалния интервал по 1440, така че това сега представлява 1440 пъти броя дни, които иначе би имал. След това оставате с броя на секундите.

Струва си да се отбележи, че:

Когато интервалните изчисления връщат стойност за дата и час, резултатът трябва да бъде действителна стойност за дата и час или базата данни връща грешка. Например следващите две изрази връщат грешки:

Методът "трик" ще се проваля, рядко, но пак ще се провали. Както винаги, най-добре е да го направите както трябва.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да вмъкнете данни директно от Excel в базата данни на Oracle

  2. Oracle WITH и MATERIALIZE hint действа като автономна транзакция за функции

  3. как да замените буквата с ударение в колона varchar2 в oracle

  4. Уникален ключ в Oracle с примери

  5. Erlang и неговата консумация на Heap памет