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

ROUND(datum) Funkce v Oracle

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> pre 

Vý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 o null 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 SQL SELECT 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.

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:

  1. php mysqli_connect:metoda ověřování neznámá klientovi [caching_sha2_password]

  2. Nejsou n-tice vkládány postupně do databázové tabulky?

  3. Funkce NCHR() v Oracle

  4. Implementace vztahu jedna ku nule nebo jedné na SQL Server