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

TIMESTAMPDIFF в Oracle 11g?

Тази функция не съществува в Oracle RDMBS; ясно го направи в Oracle Lite (което никога не съм срещал) и вярвам, че е в други бази данни като MySQL.

Има документация, обхващаща аритметика за дата, час и интервал което ще ви отведе част от пътя дотам; можете или да извадите едно времево клеймо от друго; или една дата от друга, или комбинация от двете - но е по-лесно да се придържате към един тип данни. В зависимост от това кой използвате, ще получите или интервал, или число, представляващо броя на дните:

SQL> SELECT CURRENT_TIMESTAMP - TIMESTAMP '1998-12-09 00:00:00' FROM DUAL;

CURRENT_TIMESTAMP-TIMESTAMP'1998-12-0900:00:00'
---------------------------------------------------------------------------
+000006169 16:16:21.287166000

SQL> SELECT CURRENT_DATE - DATE '1998-12-09' FROM DUAL;

CURRENT_DATE-DATE'1998-12-09'
-----------------------------
                   6169.67775

Ако искате само броя цели дни, можете да използвате extract() за интервала, за да получите само елемента, който искате, или trunc() за числото за премахване на дробната част:

SQL> SELECT EXTRACT(DAY FROM CURRENT_TIMESTAMP - TIMESTAMP '1998-12-09 00:00:00') FROM DUAL;

EXTRACT(DAYFROMCURRENT_TIMESTAMP-TIMESTAMP'1998-12-0900:00:00')
---------------------------------------------------------------
                                                           6169

SQL> SELECT TRUNC(CURRENT_DATE - DATE '1998-12-09') FROM DUAL;

TRUNC(CURRENT_DATE-DATE'1998-12-09')
------------------------------------
                                6169

Можете също да trunc() текущата дата преди сравнение, ако предпочитате, така че сравнявате и двете в полунощ, което означава, че няма да има дробна част от деня за премахване:

SQL> SELECT TRUNC(CURRENT_DATE) - DATE '1998-12-09' FROM DUAL;

TRUNC(CURRENT_DATE)-DATE'1998-12-09'
------------------------------------
                                6169

Използвал съм литерали за дата на ANSI за фиксираната дата, но можете да използвате съществуваща променлива или колона за дата или времево клеймо; или to_date() или to_timestamp() ако имате низ в различен формат.

Можете също да използвате extract() за преобразуване на компоненти на интервал в комбинирана стойност, както е показано тук ; и също така се уверете, че сте наясно с разликата между current_date и sysdate и еквивалентите на клеймото за време .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. libaio.so.1:не може да отвори споделен обектен файл

  2. PL/SQL (Как да изчислим първия и последния ден на всяко тримесечие на всяка година)

  3. Как да форматирате числа в научна нотация в Oracle

  4. Инсталиране на Oracle 12c Standard Edition на Windows 10 Professional

  5. CachedRowSet по-бавен от ResultSet?