В 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: