2013-03-16 7 views
12

Ad esempio, la data indicata è 1924/04/04 e voglio scoprire l'ultimo giorno di febbraio dell'anno 1924.Come ottenere l'ultimo giorno di un mese da una determinata data?

mi si avvicinò con l'add_month ma sembra non flessibili, se Ho diverso mese dato dalla fonte dei dati

Qualche buona idea?

+0

04/04/1924 -> qui 04 rappresenta aprile non febbraio vuoi 2 mesi fa l'ultimo giorno – Civa

risposta

30

Oracle ha una funzione last_day():

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; 

Risultati:

April, 30 1924 00:00:00+0000 

March, 31 1924 00:00:00+0000 

February, 29 1924 00:00:00+0000 

Uso Add_Months() sulla data per ottenere il mese appropriato, e quindi applicare last_day().

+0

@ Ben: il codice funziona con '-' o '/' sotto 11g –

+1

Lo farà, sì. [Funzionerà anche con poche altre cose] (http://www.sqlfiddle.com/#!4/d41d8/8840), è davvero confuso però ... ed è parzialmente un incidente che funzioni. Gli interni di Oracle, IMHO, eliminano troppi dati dal formato della data. Mi ha inciampato in occasione; fastidiosamente. Sentiti libero di tornare indietro se vuoi :-). – Ben

+0

Non ho trovato affatto confuso. –

0

Questo ti mostrerà l'ultimo giorno del mese

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)) 

è possibile sostituire la data del sistema che cosa mai data che si desidera con 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)) 

o semplicemente

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

non sono visto. sono in modalità di modifica assolutamente la tua cosa è giusta. do +1 alla tua risposta – Civa

0

per ottenere il mese e l'anno selezionato ultimo giorno:

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

0

se si vuole sapere se la data è definitiva montare

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

interrogazione INPL SQL per ottenere il primo giorno e l'ultimo giorno del mese:

primo giorno:

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

Ultimo giorno:

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

ottenere il primo e ultimo giorno del mese basta cambiare la cifra mese per ottenere il primo e l'ultimo giorno del mese

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 

Risultato:

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