Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Funkcja TRUNC(data) w Oracle

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:

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dokumentacja Oracle

  2. LITAGG w Oracle, aby zwrócić różne wartości

  3. Przykładowe schematy na GitHub

  4. Jak dodać wskaźnik AD/BC do daty w Oracle?

  5. Lipiec 2016 Zasilacz nie robi isqora