Szukaj…


Data Arytmetyka

Oracle obsługuje typy danych DATE (obejmuje czas do najbliższej sekundy) i TIMESTAMP (obejmuje czas do ułamków sekundy), które umożliwiają natywne obliczanie (dodawanie i odejmowanie). Na przykład:

Aby uzyskać następny dzień:

select to_char(sysdate + 1, 'YYYY-MM-DD') as tomorrow from dual;

Aby uzyskać poprzedni dzień:

select to_char(sysdate - 1, 'YYYY-MM-DD') as yesterday from dual;

Aby dodać 5 dni do bieżącej daty:

select to_char(sysdate + 5, 'YYYY-MM-DD') as five_days_from_now from dual;

Aby dodać 5 godzin do bieżącej daty:

select to_char(sysdate + (5/24), 'YYYY-MM-DD HH24:MI:SS') as five_hours_from_now from dual;

Aby dodać 10 minut do bieżącej daty:

select to_char(sysdate + (10/1440), 'YYYY-MM-DD HH24:MI:SS') as ten_mintues_from_now from dual;

Aby dodać 7 sekund do bieżącej daty:

select to_char(sysdate + (7/86400), 'YYYY-MM-DD HH24:MI:SS') as seven_seconds_from_now from dual;

Aby wybrać wiersze, w których hire_date jest 30 dni temu lub więcej:

select * from emp where hire_date < sysdate - 30;

Aby wybrać wiersze, w których last_updated znajduje się w ostatniej godzinie:

select * from logfile where last_updated >= sysdate - (1/24);

Oracle zapewnia również wbudowany typ danych INTERVAL który reprezentuje czas (np. 1,5 dnia, 36 godzin, 2 miesiące itp.). Można ich również używać z arytmetyką z wyrażeniami DATE i TIMESTAMP . Na przykład:

select * from logfile where last_updated >= sysdate - interval '1' hour;

Funkcja Add_months

Składnia: add_months(p_date, integer) return date;

Funkcja Add_months dodaje miesiące do daty p_date.

SELECT add_months(date'2015-01-12', 2) m FROM dual;
M.
2015-03-12

Możesz także odjąć miesiące używając ujemnego amt

SELECT add_months(date'2015-01-12', -2) m FROM dual;
M.
2014-11-12

Gdy w obliczonym miesiącu jest mniej dni niż podana data, zwracany jest ostatni dzień obliczonego miesiąca.

SELECT to_char( add_months(date'2015-01-31', 1),'YYYY-MM-DD') m FROM dual;
M.
28.02.2015


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow