V Oracle ROUND(date)
Funkce vrací datum zaokrouhlené na zadanou jednotku data.
Ve výchozím nastavení zaokrouhluje datum na nejbližší den, ale můžete zadat volitelný argument, který určuje alternativní jednotku, která se má použít.
Oracle má také ROUND(number)
syntaxe, která se používá u čísla. Tento článek je výhradně o ROUND(date)
syntaxe, která se používá k datu.
Syntaxe
Syntaxe vypadá takto:
ROUND(date [, fmt ])
Kde date
musí vyřešit na DATE
hodnota a fmt
je volitelný formátový model, který určuje jednotku, která má zaokrouhlit date
na. Model formátu může být jakýkoli z podporovaných modelů formátu pro TRUNC(date)
a ROUND(date)
funkce.
Příklad
Zde je příklad:
SELECT
ROUND(TO_DATE('2030-12-31 12:30:45', 'YYYY-MM-DD HH24:MI:SS'))
FROM DUAL;
Výsledek:
01-JAN-31
V tomto případě byla časová část po poledni a datum bylo zaokrouhleno na další den (což byl také další měsíc a rok).
Bylo zaokrouhleno na den, protože to je výchozí jednotka, na kterou se má zaokrouhlovat, a výslovně jsme neurčili jinou jednotku.
Zde je to, co se stane, když zkrátím časovou část před poledne:
SELECT
ROUND(TO_DATE('2030-12-31 11:59:59', 'YYYY-MM-DD HH24:MI:SS'))
FROM DUAL;
Výsledek:
31-DEC-30
Tentokrát je zaokrouhleno na stejný den.
Upozorňujeme, že vrácený formát data závisí na hodnotě vašeho NLS_DATE_FORMAT
parametr (zde je návod, jak formátovat hodnoty data pro vaši relaci, pokud vás to zajímá).
Zaokrouhlit na zadanou jednotku data
Zde je příklad zadání jiné jednotky data pro zaokrouhlení data na:
SELECT
ROUND(DATE '2030-12-31', 'MONTH')
FROM DUAL;
Výsledek:
01-JAN-31
Tady je to znovu, ale s různými jinými daty:
SELECT
ROUND(DATE '2030-03-10', 'MONTH') AS "2030-03-10",
ROUND(DATE '2030-03-18', 'MONTH') AS "2030-03-18",
ROUND(DATE '2030-08-10', 'MONTH') AS "2030-08-10",
ROUND(DATE '2030-08-10', 'MONTH') AS "2030-08-10"
FROM DUAL;
Výsledek:
2030-03-10 2030-03-18 2030-08-10 2030-08-10 _____________ ______________ _____________ __________ __________ _______0 AR-0 AU-3 AU-1 AU-0 AU-3 AU-1 AU-0 AU-0 AU-3 AU-10>A tady je to se stejným datem, ale různými formátovými prvky:
SELECT ROUND(DATE '2030-10-31', 'DAY') AS "Day", ROUND(DATE '2030-10-31', 'WW') AS "Week of year", ROUND(DATE '2030-10-31', 'MONTH') AS "Month", ROUND(DATE '2030-10-31', 'YEAR') AS "Year" FROM DUAL;
Výsledek:
Den Týden v roce Měsíc Rok ____________ _______________ ____________ _____________ 03-LISTOPAD-30 29-ŘÍJNA-30 01-NOV-30-31 01-JAN>To ukazuje, jak velké odchylky můžeme mít v závislosti na zadané jednotce data.
Záporné datum
Co se stane, když je změníme na záporná data:
SELECT ROUND(DATE '-2030-10-31', 'DAY') AS "Day", ROUND(DATE '-2030-10-31', 'WW') AS "Week of year", ROUND(DATE '-2030-10-31', 'MONTH') AS "Month", ROUND(DATE '-2030-10-31', 'YEAR') AS "Year" FROM DUAL;
Výsledek:
Den Týden v roce Měsíc Rok ____________ _______________ ____________ _____________ 28-říjen-30 29-říjen-30 01-NOV-30-291-JAN> preVýsledky se samozřejmě budou měnit se změnou data.
Zaokrouhlování nedatových argumentů
Co se stane, když se pokusíme zaokrouhlit nedatový argument, který nelze převést na
DATE
datový typ:SELECT ROUND('Bruce') FROM DUAL;
Výsledek:
Chyba začínající na řádku:1 v příkazu -SELECT ROUND('Bruce')FROM DUALEHlášení o chybě -ORA-01722:neplatné čísloČísla však můžeme zaokrouhlovat – existuje numerická verze této funkce, která nám umožňuje zaokrouhlovat čísla.
Nulové hodnoty
Pokus o zaokrouhlení
null
vrátínull
a snaží se zaokrouhlit datum onull
výsledkem je takénull
:SET NULL 'null'; SELECT ROUND(null), ROUND(null, 'MONTH'), ROUND(DATE '2030-12-20', null) FROM DUAL;
Výsledek:
ROUND(NULL) ROUND(NULL,'MONTH') ROUND(DATE'2030-12-20',NULL) ______________ _______________________ ______________nu___________nu_____________nu_Ve výchozím nastavení vrátí SQLcl a SQL*Plus prázdné místo vždy, když
null
dochází v důsledku SQLSELECT
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.Nesprávný počet argumentů
Volání
ROUND()
bez předání jakýchkoli argumentů vrátí chybu:SELECT ROUND() FROM DUAL;
Výsledek:
Chyba začínající na řádku:1 v příkazu -SELECT ROUND()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 předání nesprávného počtu argumentů má za následek chybu:
SELECT ROUND(DATE '2030-12-20', 'day', 'month') FROM DUAL;
Výsledek:
Chyba začínající na řádku:1 v příkazu -SELECT ROUND(DATE '2030-12-20', 'den', 'měsíc')FROM DUALEchyba na příkazovém řádku:1 Sloupec:40Hlášení o chybě -Chyba SQL:ORA-00939 :příliš mnoho argumentů pro funkci00939. 00000 - "příliš mnoho argumentů pro funkci"*Příčina:*Akce: