Jak wyciągnąć rok z daty?
Najprostsze zapytanie to:
select extract(year from date '2015-10-01') from dual
a więc można użyć w zapytaniu funkcji extract(year from
dtpocz)
w podobny sposób możemy wyciągnąć
miesiąc - extract(month
from dtpocz)
dzień - extract(day from
dtpocz)
godzina - extract(hour from
dtpocz)
minuta - extract(minute
from dtpocz)
sekundy - extract(second
from dtpocz)
Przy czym kolumna dtpocz może być typu datetime dla wyciągania roku, miesiąca i dnia, natomiast musi być
typu timestamp dla godzin, minut i sekund.
Prawidłowo wykonają się zapytania poniżej:
select extract(year from sysdate) from dual;
select extract(month from sysdate) from dual;
select
extract(day from sysdate) from dual;
Nie możemy jednak użyć tej funkcji w ten sposób:
SELECT EXTRACT(HOUR FROM SYSDATE) FROM dual;
Dostaniemy wówczas błąd:
-- ERROR at line 1:
--
ORA-30076: invalid extract field for extract source
Możemy wykonać to np. w taki sposób:
select extract(hour from to_timestamp('2016-02-26
09:01:45',
'YYYY-MM-DD HH24:MI:SS')) from dual;
lub
select extract(hour from timestamp '2016-02-26 09:01:45') from dual;
Możemy użyć też tak extract(year from date '2016-02-26 09:01:45')
Możemy więc w prosty sposób wyciągnąć z pola datetime pola
select EXTRACT(year from sysdate) as ROK, EXTRACT(month from sysdate) as MIESIAC, EXTRACT(day from sysdate) as DZIEN from dual;
-- ROK MIESIAC DZIEN
-- 2016 2 25
Funkcja EXTRACT może być używana w wersji
Oracle 9i, Oracle 10g, Oracle 11g, Oracle 12c.