W bazie danych Oracle TRUNC(date)
funkcja zwraca podaną wartość daty z częścią czasową dnia skróconą do jednostki podanej w określonym modelu formatu.
Oracle ma również TRUNC(number)
składnia, która jest używana na liczbach. Ten artykuł dotyczy wyłącznie TRUNC(date)
składnia, która jest używana w datach.
Składnia
Składnia wygląda tak:
TRUNC(date [, fmt ])
Gdzie date
to data do skrócenia, a fmt
to opcjonalny model formatu, który określa jednostkę, dla której należy obciąć wartość. Model formatu może być dowolnym z obsługiwanych modeli formatu dla TRUNC(date)
i ROUND(date)
funkcje.
Funkcja działa zgodnie z zasadami kalendarza gregoriańskiego (nie jest wrażliwa na wartość NLS_CALENDAR
parametr).
Przykład
Oto przykład:
SELECT TRUNC(DATE '2035-08-22', 'MONTH')
FROM DUAL;
Wynik:
01-AUG-35
Oto kilka innych:
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;
Wynik:
D DD Month Year CC ____________ ____________ ____________ ____________ ____________ 19-AUG-35 22-AUG-35 01-AUG-35 01-JAN-35 01-JAN-01
Wynik jest formatowany zgodnie z formatem daty bieżącej sesji. Zobacz Jak sprawdzić format daty bieżącej sesji i Jak zmienić format daty dla bieżącej sesji, aby uzyskać więcej informacji na ten temat.
Domyślna jednostka daty
Domyślna jednostka daty to DD
:
SELECT
TRUNC(DATE '2035-08-22') AS "Default",
TRUNC(DATE '2035-08-22', 'DD') AS "DD"
FROM DUAL;
Wynik:
Default DD ____________ ____________ 22-AUG-35 22-AUG-35
W porównaniu z ROUND()
TRUNC(date)
funkcja jest inna niż ROUND(date)
funkcjonować. ROUND()
funkcja zaokrągla datę w górę w niektórych przypadkach, aw innych w dół. TRUNC()
z drugiej strony funkcja po prostu obcina datę do określonej jednostki bez zaokrąglania.
Oto porównanie pokazujące tę różnicę:
SELECT
TRUNC(DATE '2030-12-31', 'MONTH') AS "Trunc",
ROUND(DATE '2030-12-31', 'MONTH') AS "Round"
FROM DUAL;
Wynik:
Trunc Round ____________ ____________ 01-DEC-30 01-JAN-31
Wartości puste
Jeśli któryś z argumentów jest null
, wynik to null
:
SET NULL 'null';
SELECT
TRUNC(null, 'D'),
TRUNC(date'2020-12-30', null)
FROM DUAL;
Wynik:
TRUNC(NULL,'D') TRUNC(DATE'2020-12-30',NULL) __________________ _______________________________ null null
Domyślnie SQLcl i SQL*Plus zwracają spację za każdym razem, gdy w wyniku polecenia SQL SELECT
wystąpi wartość null oświadczenie.
Możesz jednak użyć SET NULL
aby określić inny ciąg do zwrócenia. Tutaj określiłem, że ciąg null
należy zwrócić.
Nieprawidłowa liczba argumentów
Wywołanie TRUNC()
bez argumentu powoduje błąd:
SELECT TRUNC()
FROM DUAL;
Wynik:
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:
A wywołanie go ze zbyt dużą liczbą argumentów skutkuje błędem:
SELECT TRUNC(1, 2, 3)
FROM DUAL;
Wynik:
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: