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 01Vý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-35Ve srovnání s
ROUND()
TRUNC(date)
funkce se liší od funkceROUND(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-31Nulové hodnoty
Pokud je některý z argumentů
null
, výsledkem jenull
: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 nullVe 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ězecnull
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: