Tutorial for Oracle DBA
On januar 1, 2022 by adminDatofunktioner og operatorer.
For at se systemets dato og klokkeslæt skal du bruge følgende funktioner :
CURRENT_DATE :returnerer den aktuelle dato i sessionens tidszone i en værdi i den gregorianske kalender af datatype
DATE
SYSDATE :returnerer den aktuelle dato og klokkeslæt.
SYSTIMESTAMP :Funktionen SYSTIMESTAMP returnerer systemdatoen, herunder brøkdele af sekunder og tidszone
for databasen. Returtypen er TIMESTAMP WITH TIME ZONE.
SYSDATE Eksempel
For at se den aktuelle systemdato og klokkeslæt skal du give følgende forespørgsel:
select sysdate from dual;
SYSDATE
——-
8-AUG-03
Det format, som datoen vises i, afhænger af parameteren NLS_DATE_FORMAT.
Sæt f.eks. NLS_DATE_FORMAT til følgende format
alter session set NLS_DATE_FORMAT=’DD-MON-YYYYYY HH:MIpm’;
Derpå giver den giver følgende anvisning
select sysdate from dual;
SYSDATE
——————
8-AUG-2003 03:05pm
Standardindstillingen for NLS_DATE_FORMAT er DD-MON-YY
CURRENT_DATE Eksempel
For at se den aktuelle systemdato og -tid med tidszone skal du bruge funktionen CURRENT_DATE
ALTER SESSION SET TIME_ZONE = ‘-4:0’;
ALTER SESSION SET NLS_DATE_FORMAT = ‘DD-MON-YYYY HH24:MI:SS’;
SELECT SESSIONTIMEZONE, CURRENT_DATE FROM DUAL;
SESSIONTIMEZONE CURRENT_DATE
————— ——————–
-04:00 22-APR-2003 14:15:03
ALTER SESSION SET TIME_ZONE = ‘-7:0’;
SELECT SESSIONTIMEZONE, CURRENT_DATE FROM DUAL;
SESSIONTIMEZONE CURRENT_DATE
————— ——————–
-07:00 22-APR-2003 09:15:33
SYSTIMESTAMP Eksempel
For at se den aktuelle systemdato og -tid med brøkdele af sekunder med tidszone skal du angive følgende
select systimestamp from dual;
SYSTIMESTAMP
——————————-
22-APR-03 08.38.55.55.538741 AM -07:00
DATUM FORMAT MODELLER
For at oversætte datoen til en anden formatstreng kan du bruge funktionen TO_CHAR med datoformat. For at se den aktuelle dag kan du f.eks. give følgende forespørgsel
Select to_char(sysdate,’DAY’) “Today” FROM DUAL;
TODAY
——-
THURSDAY
For at oversætte en tegnværdi, som er i et andet format end standarddatumsformatet, til en datoværdi kan du bruge TO_DATE-funktionen med datumsformat til dato
Som denne “DAY”-formatmodel er der mange andre datumsformatmodeller til rådighed i Oracle. I følgende tabel er der en liste over datoformatmodeller.
FORMAT |
MÅDE |
D |
Day of the week |
DD |
|
DD |
Dag i måneden |
DDD |
Dag i året |
DAG |
Fuld dag for eks. ‘mandag’, ‘tirsdag’, ‘onsdag’ |
DY |
Dag med tre bogstaver f.eks. ‘MON’, ‘TUE’,’FRI’ |
W |
Uge i måneden |
WW |
Uge i året |
MM |
Måned i to cifre (1-jan, 2-Feb,…12-dec) |
MON |
Måned i tre tegn som “jan”, “feb”, “apr” |
MONTH |
Fuld måned som “januar”, “februar”, “april” |
RM |
Måned i romerske bogstaver (I-XII, I-Jan, II-Feb,…XII-Dec) |
Q |
Kvartal i måneden |
YYY |
De to sidste cifre i året. |
ÅÅÅÅÅÅ |
Fuldt år |
ÅR |
År i ord som “Nineteen Nineteen Ninety Nine” |
HHH |
Stunder i 12-timers format |
HHH12 |
Stunder i 12-timers format |
HHH24 |
Stunder i 24 timers format |
MI |
Minutter |
SS |
Sekunder |
FF |
Fraktionssekunder |
SSSSSSS |
Millisekunder |
J |
Julian Day i.e Dage siden 1. jan-4712 f.Kr. til dags dato |
RR |
Hvis året er mindre end 50 Antager, at året er det 21. århundrede. Hvis årstallet er større end 50, antages årstallet at være i det 20. århundrede. |
suffikser
TH |
Returnerer th, st, rd eller nd i henhold til det forreste tal som 1st , 2. 3. 4. |
SP |
Stiller det ledende tal ud |
AM eller PM |
Giver AM eller PM i henhold til klokkeslættet |
SPTH |
Giver stavet ordinalt tal tilbage. For. Eksempel Første, Fjerde |
For eksempel for at se dagens dato i følgende format
Fredag, 7. marts 2014
Giv følgende anvisning
Selekter to_char(sysdate,’Day, ddth Month, yyyy’) “Today” from dual;
TODAY
————————
Fredag, 7th March, 2014
For eksempel ønsker du at se ansættelsesdatoer for alle medarbejdere i følgende format
Fredag, 8th August, 2003
Giv følgende forespørgsel.
select to_char(hire_date,’Day, ddth Month, yyyy’) from emp;
TO_DATE Eksempel
To_Date-funktionen bruges til at konvertere strenge til datoværdier. Du ønsker f.eks. at se, hvad dagen var den 15-aug-1947. Du bruger to_date-funktionen til først at konvertere strengen til en datoværdi og derefter sende denne værdi videre til to_char-funktionen for at udtrække dagen.
select to_char(to_date(’15-aug-1947′,’dd-mon-yyyy’),’Day’)
from dual;
TO_CHAR(
——–
Fredag
For at se, hvor mange dage der er gået siden 15-aug-1947, skal du give følgende forespørgsel
select sysdate-to_date(’15-aug-1947′,’dd-mon-yyyy’) from dual;
Nu ønsker vi at se, hvilken dato der vil indtræffe efter 45 dage fra nu
select sysdate+45 from dual;
SYSDATE
——-
06-JUN-2003
ADD_MONTHS
For at se, hvilken dato der vil indtræffe efter 6 måneder fra nu af, kan vi bruge ADD_MONTHS-funktionen
Selekter ADD_MONTHS(SYSDATE,6) fra dual;
ADD_MONTHS
———-
22-OCT-2003
MONTHS_BETWEEN
For at se, hvor mange måneder der er gået siden en bestemt dato, skal du bruge funktionen MONTHS_BETWEEN.
For eksempel, for at se, hvor mange måneder der er gået siden 15-aug-1947, skal du give følgende forespørgsel.
select months_between(sysdate,to_date(’15-aug-1947′))
from dual;
Months
——
616.553
For at fjerne decimalværdien skal du bruge truncate-funktionen
select trunc(months_between(sysdate,to_date(’15-aug-1947′)))
from dual;
Måneder
——
616
LAST_DAY
Hvis du vil se den sidste dato i måneden for en given dato, skal du bruge funktionen LAST_DAY.
select LAST_DAY(sysdate) from dual;
LAST_DAY
——–
31-AUG-2003
NEXT_DAY
For at se, hvornår en bestemt dag kommer næste gang, skal du bruge funktionen NEXT_DAY.
For eksempel for at se, hvornår næste lørdag kommer, skal du angive følgende forespørgsel
select next_day(sysdate) from dual;
NEXT_DAY
———–
09-AUG-2003
EXTRACT
En EXTRACT-datotidsfunktion udtrækker og returnerer værdien af et angivet datotidsfelt fra et datotids- eller intervalværdiudtryk. Når du udtrækker en TIMEZONE_REGION eller TIMEZONE_ABBR (forkortelse), er den returnerede værdi en streng, der indeholder det relevante tidszonebetegnelse eller forkortelse
Syntaksen for EXTRACT-funktionen er
EXTRACT ( YEAR / MONTH / WEEK / DAY / HOUR / MINUTE / TIMEZONE FROM DATE)
Eksempel
Det følgende demonstrerer brugen af EXTRACT-funktionen til at udtrække årstal fra den aktuelle dato.
select extract(year from sysdate) from dual;
EXTRACT
——-
2003
Skriv et svar