2013-03-16 8 views
12

Na przykład, dana data jest 04/04/1924 i chcę, aby dowiedzieć się ostatniego dnia lutego roku 1924.Jak uzyskać ostatni dzień miesiąca od określonej daty?

wpadłem na add_month ale wydaje się, jeżeli nie elastyczny Mam inny podany miesiąc ze źródła danych

Jakieś dobre pomysły?

+0

04/04/1924 -> tutaj 04 oznacza kwiecień, luty Czy chcesz 2 miesiące z powrotem ostatniego dnia? – Civa

Odpowiedz

30

Oracle ma last_day() funkcję:

SELECT LAST_DAY(to_date('04/04/1924','MM/DD/YYYY')) from dual; 

SELECT LAST_DAY(ADD_MONTHS(to_date('04/04/1924','MM/DD/YYYY'), -1)) from dual; 

SELECT LAST_DAY(ADD_MONTHS(to_date('04/04/1924','MM/DD/YYYY'), -2)) from dual; 

wyniki:

April, 30 1924 00:00:00+0000 

March, 31 1924 00:00:00+0000 

February, 29 1924 00:00:00+0000 

Zastosowanie Add_Months() na bieżąco, aby uzyskać odpowiedni miesiąc, a następnie zastosować last_day().

+0

@Ben: kod działa z "-" lub "/" pod 11g –

+1

To zrobi, tak. Będzie to [działa również z wieloma innymi] (http://www.sqlfiddle.com/#!4/d41d8/8840), ale jest to naprawdę mylące ... i częściowo jest to przypadek, że to działa. Wewnętrzne elementy Oracle, IMHO, usuwają zbyt wiele danych z formatu daty. Czasami mnie potknął; denerwująco. Zachęcamy do wycofania, jeśli chcesz :-). – Ben

+0

Nie uważam tego za mylące. –

0

To pokaże ci ostatni dzień miesiąca

SELECT Max(LAST_DAY(ADD_MONTHS(SYSDATE, -2)) + level) 
FROM dual 
CONNECT BY 
    level <= LAST_DAY(ADD_MONTHS(SYSDATE, -1)) - LAST_DAY(ADD_MONTHS(SYSDATE, -2)) 

można zastąpić datę systemową, co kiedykolwiek data chcesz z TO_DATE ('04/04/1924' , 'MM-DD-YYYY')

SELECT Max(LAST_DAY(ADD_MONTHS(to_date('04/04/1924','MM-DD-YYYY'), -2)) + level) 
FROM dual 
CONNECT BY 
    level <= LAST_DAY(ADD_MONTHS(to_date('04/04/1924','MM-DD-YYYY'), -1)) - LAST_DAY(ADD_MONTHS(to_date('04/04/1924','MM-DD-YYYY'), -2)) 

lub po prostu

select LAST_DAY(ADD_MONTHS(to_date('04/04/1924','MM-DD-YYYY'), -2)) from dual; 
+0

Nie widziałem. Jestem w trybie edycji, absolutnie twoja sprawa jest właściwa. daję +1 twojej odpowiedzi – Civa

0

dostać wybrany miesiąc i rok ostatniego dnia:

SELECT TO_CHAR (LAST_DAY (TO_DATE (: X_THE_MONTH || '/ 01 /' || : X_THE_YEAR 'MM/DD/YYYY')), 'dd') FROM DUAL

0

jeśli chcesz wiedzieć, czy data jest ostateczna zamontować

SELECT 
case when 
TO_DATE('19240430','YYYYMMDD') = LAST_DAY(TO_DATE('04/04/1924','MM/DD/YYYY')) 
THEN 1 ELSE 0 END LAST_MOUNTH_DAY FROM DUAL 
3

zapytanie inpl sql, aby uzyskać pierwsze dni, a ostatni dzień miesiąca:

pierwszy dzień:

select to_date(to_char(LAST_DAY(sysdate),'YYYYMM'),'YYYYMM') from dual; 

Ostatni dzień:

select LAST_DAY(to_date(to_char((sysdate),'YYYYMM'),'YYYYMM')) from dual; 
0

Get Pierwszy i ostatni dzień miesiąca Wystarczy zmienić cyfrę miesiąca, aby zdobyć pierwszy i ostatni dzień miesiąca

select 
    to_date('01/'|| '07/' || to_char(sysdate, 'YYYY'), 'dd/mm/yyyy') first, 
    last_day(to_date('01/'|| '07/' || to_char(sysdate, 'YYYY'), 'dd/mm/yyyy')) last 
    from dual 

Wynik:

first   last 
-------------------------- 
01/02/2017 28/02/2017