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

Функция TRUNC(дата) в Oracle

В Oracle Database, TRUNC(date) функцията връща дадената стойност на датата с частта от времето от деня, съкратена до единицата, предоставена в посочения модел на формат.

Oracle също има TRUNC(number) синтаксис, който се използва за числа. Тази статия е само за TRUNC(date) синтаксис, който се използва за дати.

Синтаксис

Синтаксисът е така:

TRUNC(date [, fmt ])

Където date е датата за съкращаване и fmt е допълнителен модел на формат, който определя единица, за която да се съкрати стойността. Форматният модел може да бъде всеки от поддържаните модели на формат за TRUNC(date) и ROUND(date) функции.

Функцията работи според правилата на григорианския календар (не е чувствителна към стойността на NLS_CALENDAR параметър).

Пример

Ето един пример:

SELECT TRUNC(DATE '2035-08-22', 'MONTH')
FROM DUAL;

Резултат:

01-AUG-35

Ето още няколко:

SELECT 
    TRUNC(DATE '2035-08-22', 'D') AS "D",
    TRUNC(DATE '2035-08-22', 'DD') AS "DD",
    TRUNC(DATE '2035-08-22', 'MONTH') AS "Month",
    TRUNC(DATE '2035-08-22', 'YEAR') AS "Year",
    TRUNC(DATE '2035-08-22', 'CC') AS "CC"
FROM DUAL;

Резултат:

           D           DD        Month         Year           CC 
____________ ____________ ____________ ____________ ____________ 
19-AUG-35    22-AUG-35    01-AUG-35    01-JAN-35    01-JAN-01   

Резултатът се форматира според формата на датата за текущата сесия. Вижте как да проверите формата на датата на текущата сесия и как да промените формата на датата за текущата сесия за повече информация относно това.

Единица за дата по подразбиране

Единицата за дата по подразбиране е DD :

SELECT 
    TRUNC(DATE '2035-08-22') AS "Default",
    TRUNC(DATE '2035-08-22', 'DD') AS "DD"
FROM DUAL;

Резултат:

     Default           DD 
____________ ____________ 
22-AUG-35    22-AUG-35   

В сравнение с ROUND()

TRUNC(date) функцията е различна от ROUND(date) функция. ROUND() функцията закръгля датата нагоре в някои случаи и надолу в други. TRUNC() функцията, от друга страна, просто съкращава датата до посочената единица без закръгляване.

Ето сравнение, за да демонстрирате тази разлика:

SELECT 
    TRUNC(DATE '2030-12-31', 'MONTH') AS "Trunc",
    ROUND(DATE '2030-12-31', 'MONTH') AS "Round"
FROM DUAL;

Резултат:

       Trunc        Round 
____________ ____________ 
01-DEC-30    01-JAN-31   

Нулеви стойности

Ако някой от аргументите е null , резултатът е null :

SET NULL 'null';
SELECT 
    TRUNC(null, 'D'),
    TRUNC(date'2020-12-30', null)
FROM DUAL;

Резултат:

   TRUNC(NULL,'D')    TRUNC(DATE'2020-12-30',NULL) 
__________________ _______________________________ 
              null null                           

По подразбиране SQLcl и SQL*Plus връщат празно пространство, когато се появи нулева стойност в резултат на SQL SELECT изявление.

Можете обаче да използвате SET NULL за да посочите различен низ, който да бъде върнат. Тук посочих, че низът null трябва да бъдат върнати.

Невалиден брой аргументи

Извикване на TRUNC() без аргумент води до грешка:

SELECT TRUNC()
FROM DUAL;

Резултат:

Error starting at line : 1 in command -
SELECT TRUNC()
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function"
*Cause:    
*Action:

И извикването му с твърде много аргументи води до грешка:

SELECT TRUNC(1, 2, 3)
FROM DUAL;

Резултат:

Error starting at line : 1 in command -
SELECT TRUNC(1, 2, 3)
FROM DUAL
Error at Command Line : 1 Column : 20
Error report -
SQL Error: ORA-00939: too many arguments for function
00939. 00000 -  "too many arguments for function"
*Cause:    
*Action:

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

  2. SSIS не успява да запази пакетите и рестартира Visual Studio

  3. Връзката не може да бъде прехвърлена към oracle.jdbc.OracleConnection

  4. Oracle RAC VIP и ARP Primer

  5. Как да разделите низ в Oracle