V databázi Oracle TRUNC(number)
funkce vrací dané číslo zkrácené na daný počet desetinných míst.
Oracle má také TRUNC(date)
funkce, která se používá na datech. Tento článek je výhradně o TRUNC(number)
funkce, která se používá u čísel.
Syntaxe
Syntaxe vypadá takto:
TRUNC(n1 [, n2 ])
Kde n1
je hodnota ke zkrácení a n2
je volitelný argument, který určuje, na kolik desetinných míst se má zkrátit n1
na. Pokud n2
je vynecháno, pak n1
je zkrácen na nula desetinných míst.
n1
může být jakýkoli číselný datový typ nebo jakýkoli nenumerický datový typ, který lze implicitně převést na číselný datový typ.
Příklad
Zde je příklad:
SELECT TRUNC(3.95)
FROM DUAL;
Výsledek:
TRUNC(3,95) ______________ 3
Zadejte desetinné místo
Zde je příklad předání druhého argumentu pro určení, na kolik desetinných míst se má hodnota zkrátit:
SELECT TRUNC(1.25817, 2)
FROM DUAL;
Výsledek:
TRUNC(1,25817;2) ____________________ 1,25
Zde jsou některé další:
SELECT
TRUNC(1.25817, 1) AS "1",
TRUNC(1.25817, 2) AS "2",
TRUNC(1.25817, 3) AS "3",
TRUNC(1.25817, 4) AS "4"
FROM DUAL;
Výsledek:
1 2 3 4 ______ _______ ________ _________ 1,2 1,25 1,258 1,2581
Záporná desetinná místa
Druhý argument může být v případě potřeby záporná hodnota. Předání záporné hodnoty způsobí, že číslice budou vlevo desetinného místa na nulu.
Příklad:
SELECT TRUNC(6973.45, -2)
FROM DUAL;
Výsledek:
TRUNC(6973,45,-2) _____________________ 6900
Ve srovnání s ROUND()
TRUNC()
funkce se liší od funkce ROUND()
funkce. ROUND()
funkce v některých případech zaokrouhlí číslo nahoru a v jiných dolů. TRUNC()
funkce na druhé straně jednoduše zkrátí číslo bez zaokrouhlení.
Zde je srovnání, které tento rozdíl demonstruje:
SELECT
TRUNC(3.6789, 2),
ROUND(3.6789, 2)
FROM DUAL;
Výsledek:
TRUNC(3,6789,2) ROUND(3,6789,2) ___________________ ___________________ 3,67 3,68
Liší se také od FLOOR()
funkce, která vrací největší celé číslo rovné nebo menší než jeho argument. FLOOR()
nepřijímá druhý argument jako ROUND()
a TRUNC()
do (stejně vždy vrací pouze celé číslo).
Nulové hodnoty
Pokud je některý argument null
, výsledkem je null
:
SET NULL 'null';
SELECT
TRUNC(null, 2),
TRUNC(2.35, null),
TRUNC(null, null)
FROM DUAL;
Výsledek:
TRUNC(NULL;2) TRUNC(2,35,NULL) TRUNC(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 SQLSELECT
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.Nečíselné argumenty
Když poskytneme nečíselné argumenty, stane se toto:
SELECT TRUNC('Hundred', 'Two') FROM DUAL;
Výsledek:
Chyba začínající na řádku:1 v příkazu -SELECT TRUNC('Sto', 'Dva')FROM DUALEHlášení o chybě -ORA-01722:neplatné čísloNeplatný počet argumentů
Volání
TRUNC()
s nesprávným počtem argumentů nebo 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:
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: