sql >> Database teknologi >  >> RDS >> Oracle

ROUND(dato) Funktion i Oracle

I Oracle er ROUND(date) funktion returnerer en dato afrundet til en specificeret datoenhed.

Som standard afrundes datoen til nærmeste dag, men du kan angive et valgfrit argument, der angiver en alternativ enhed, der skal bruges.

Oracle har også en ROUND(number) syntaks, som bruges på tal. Denne artikel handler udelukkende om ROUND(date) syntaks, som bruges på dato.

Syntaks

Syntaksen ser sådan ud:

ROUND(date [, fmt ]) 

Hvor date skal løses til en DATE værdi og fmt er en valgfri formatmodel, der specificerer den enhed, der skal rundes date til. Formatmodellen kan være en hvilken som helst af de understøttede formatmodeller for TRUNC(date) og ROUND(date) funktioner.

Eksempel

Her er et eksempel:

SELECT 
    ROUND(TO_DATE('2030-12-31 12:30:45', 'YYYY-MM-DD HH24:MI:SS'))
FROM DUAL; 

Resultat:

01-JAN-31

I dette tilfælde var tidsdelen over middag, og datoen blev afrundet til næste dag (som også tilfældigvis var den næste måned og år).

Det blev afrundet til dagen, fordi det er standardenheden at runde af til, og vi har ikke eksplicit specificeret en anden enhed.

Her er, hvad der sker, når jeg reducerer tidsdelen til før middag:

SELECT 
    ROUND(TO_DATE('2030-12-31 11:59:59', 'YYYY-MM-DD HH24:MI:SS'))
FROM DUAL; 

Resultat:

31-DEC-30

Denne gang er det afrundet til samme dag.

Bemærk, at datoformatet, der returneres, afhænger af værdien af ​​din NLS_DATE_FORMAT parameter (her er, hvordan du formaterer datoværdier for din session, hvis du er interesseret).

Afrund til en specificeret datoenhed

Her er et eksempel på at angive en anden datoenhed, som datoen skal rundes af til:

SELECT 
    ROUND(DATE '2030-12-31', 'MONTH')
FROM DUAL; 

Resultat:

01-JAN-31

Her er den igen, men med forskellige andre datoer:

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; 

Resultat:

 2030-03-10 2030-03-18 2030-08-10 2030-08-10 _____________ _____________ _____________ _____________ 01-MAR-30 01-APR-30 01-AUG-30-30-AUG-30> 

Og her er den med samme dato, men forskellige formatelementer:

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; 

Resultat:

 Dag Uge i året Måned År ____________ _______________ ____________ ____________ 03-NOV-30 29-OCT-30 01-NOV-30 01-JAN-31 

Dette viser, hvor meget variation vi kan have, afhængigt af den angivne datoenhed.

Negativ dato

Her er, hvad der sker, når vi forvandler dem til negative datoer:

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; 

Resultat:

 Dag Uge i året Måned År ____________ _______________ ____________ ____________ 28-OCT-30 29-OCT-30 01-NOV-30 01-JAN-29 

Naturligvis vil resultaterne ændre sig, efterhånden som datoen ændres.

Afrunding af ikke-dato-argumenter

Her er, hvad der sker, når vi forsøger at runde et ikke-dato-argument, der ikke kan konverteres til en DATE datatype:

SELECT ROUND('Bruce')
FROM DUAL; 

Resultat:

Fejl starter ved linje:1 i kommando -SELECT ROUND('Bruce')FROM DUALFejlrapport -ORA-01722:ugyldigt nummer

Vi kan dog afrunde tal – der er en numerisk version af denne funktion, der giver os mulighed for at afrunde tal.

Nul-værdier

Forsøger at runde null returnerer null , og forsøger at runde en dato med null resulterer også i null :

SET NULL 'null';

SELECT 
    ROUND(null),
    ROUND(null, 'MONTH'),    
    ROUND(DATE '2030-12-20', null)
FROM DUAL; 

Resultat:

 ROUND(NULL) ROUND(NULL,'MONTH') ROUND(DATE'2030-12-20',NULL) ______________ ________________________________ _______________________________ null null null 

Som standard returnerer SQLcl og SQL*Plus et tomt mellemrum, når null opstår som et resultat af en SQL SELECT udmelding.

Du kan dog bruge SET NULL for at angive en anden streng, der skal returneres. Her specificerede jeg, at strengen null skal returneres.

Forkert antal argumenter

Kalder ROUND() uden at sende nogen argumenter returnerer en fejl:

SELECT ROUND()
FROM DUAL; 

Resultat:

Fejl starter på linje :1 i kommando -SELECT ROUND()FROM DUALE Fejl ved kommandolinje :1 Kolonne :8Fejlrapport -SQL-fejl:ORA-00938:ikke nok argumenter til funktion00938. 00000 - "ikke nok argumenter for funktion"*Årsag:*Handling:

Og at sende det forkerte antal argumenter resulterer i en fejl:

SELECT ROUND(DATE '2030-12-20', 'day', 'month')
FROM DUAL; 

Resultat:

Fejl starter på linje:1 i kommando -SELECT ROUND(DATE '2030-12-20', 'day', 'month')FROM DUALEfejl på kommandolinje:1 Kolonne:40Fejlrapport -SQL-fejl:ORA-00939 :for mange argumenter til funktion00939. 00000 - "for mange argumenter for funktion"*Årsag:*Handling:

  1. Find afhængige objekter til en tabel eller visning

  2. Sådan opretter du relationer i MySQL

  3. Record returneret fra funktion har kolonner sammenkædet

  4. Sådan installeres Apache Cassandra på Ubuntu 20.10/Ubuntu 20.04