web-dev-qa-db-fra.com

Comment obtenir le dernier jour d'un mois à partir d'une date donnée?

Par exemple, la date indiquée est04/04/1924et je souhaite connaître le dernier jour du mois de février 1924.

Je suis venu avec le add_month mais il semble pas flexible si j'ai différent mois donné de source de données

Des bonnes idées?

17
Hoan Dang

Oracle a une fonction 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;

Résultats:

April, 30 1924 00:00:00+0000

March, 31 1924 00:00:00+0000

February, 29 1924 00:00:00+0000

Utilisez Add_Months() à votre date pour obtenir le mois approprié, puis appliquez/ last_day() .

35
Mitch Wheat

requête inpl sql pour obtenir le premier jour et le dernier jour du mois:

premier jour :

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

Dernier jour:

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

si vous voulez savoir si votre date est finale

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
0
Jorgechu

Obtenir les première et dernière dates du mois Il suffit de changer le chiffre du mois pour obtenir la première et la dernière date du mois.

 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

Résultat:

first         last
-------------------------- 
01/02/2017  28/02/2017
0
Abid Mehdi

pour obtenir le mois et l'année sélectionnés le dernier jour:

SELECT TO_CHAR (LAST_DAY (TO_DATE (: X_THE_MONTH || '/ 01 /' ||: X_THE_YEAR, 'MM/JJ/AAAA')), 'jj') DU DOUBLE

0
Adel

Cela vous montrera le dernier jour du mois

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

vous pouvez remplacer la date système de la date de votre choix par to_date ('04/04/1924', 'MM-JJ-AAAA')

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

ou simplement 

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