sql >> Databáze >  >> RDS >> Oracle

TRUNC(datum) Funkce v Oracle

V databázi Oracle TRUNC(date) funkce vrací danou hodnotu data s časovou částí dne zkrácenou na jednotku poskytnutou v zadaném modelu formátu.

Oracle má také TRUNC(number) syntaxe, která se používá u čísel. Tento článek je výhradně o TRUNC(date) syntaxe, která se používá pro data.

Syntaxe

Syntaxe vypadá takto:

TRUNC(date [, fmt ]) 

Kde date je datum zkrácení a fmt je volitelný model formátu, který určuje jednotku, pro kterou se má hodnota zkrátit. Model formátu může být jakýkoli z podporovaných modelů formátu pro TRUNC(date) a ROUND(date) funkce.

Funkce funguje podle pravidel gregoriánského kalendáře (není citlivá na hodnotu NLS_CALENDAR parametr).

Příklad

Zde je příklad:

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

Výsledek:

01-AUG-35

Zde jsou některé další:

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; 

Výsledek:

 D DD Měsíc Rok CC _____________ ____________ ____________ ____________ ____________ 19-AUG-35 22-AUG-35 22-AUG-35-35 01. AUG-35-35 01 

Výsledek je naformátován podle formátu data pro aktuální relaci. Další informace naleznete v části Jak zkontrolovat formát data aktuální relace a Jak změnit formát data pro aktuální relaci.

Výchozí jednotka data

Výchozí jednotka data je DD :

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

Výsledek:

 Výchozí DD ____________ ____________ 22-AUG-35 22-AUG-35 

Ve srovnání s ROUND()

TRUNC(date) funkce se liší od funkce ROUND(date) funkce. ROUND() funkce v některých případech zaokrouhlí datum nahoru a v jiných dolů. TRUNC() funkce na druhé straně jednoduše zkrátí datum na zadanou jednotku bez zaokrouhlování.

Zde je srovnání, které tento rozdíl demonstruje:

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

Výsledek:

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

Nulové hodnoty

Pokud je některý z argumentů null , výsledkem je null :

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

Výsledek:

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

Ve výchozím nastavení vrátí SQLcl a SQL*Plus prázdné místo, kdykoli se v důsledku příkazu SQL SELECT objeví hodnota null. prohlášení.

Můžete však použít SET NULL určit jiný řetězec, který má být vrácen. Zde jsem uvedl, že řetězec null by měl být vrácen.

Neplatný počet argumentů

Volání TRUNC() bez argumentu vede k chybě:

SELECT TRUNC()
FROM DUAL; 

Výsledek:

Chyba začínající na řádku:1 v příkazu -SELECT TRUNC()FROM DUALEchyba na příkazovém řádku:1 Sloupec:8Hlášení o chybě -Chyba SQL:ORA-00938:nedostatek argumentů pro funkci00938. 00000 - "nedostatek argumentů pro funkci"*Příčina:*Akce:

A volání s příliš mnoha argumenty vede k chybě:

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

Výsledek:

Chyba začínající na řádku:1 v příkazu -SELECT TRUNC(1, 2, 3)FROM DUALEchyba na příkazovém řádku:1 Sloupec:20Hlášení o chybě -Chyba SQL:ORA-00939:příliš mnoho argumentů pro funkci00939. 00000 - "příliš mnoho argumentů pro funkci"*Příčina:*Akce:

  1. Nejprve vytvořte index řetězce pomocí kódu

  2. Jak mohu vybrat ze seznamu hodnot v Oracle

  3. Jak získat přístup k MySQL pomocí kořenového uživatele MySQL

  4. Jak používat funkce SQL Server AlwaysOn