2016-02-23 2 views
1

Besoin de votre aide pour conclure la requête pour récupérer la dernière date du mois sysdate.Date limite avec la date du mois

select to_char(last_day(sysdate),'DD-Mon-YYYY HH24:MI:SS') from dual 

donne la dernière date que prévu, mais je dois temps que 23:59:00 ce qui est impossible à travers au-dessus de la requête.

+3

Il est presque toujours * plus simple * de calculer un point d'extrémité * exclusif * si vous essayez de définir une plage. Par exemple. utilisez le premier jour du mois prochain (facile à calculer) et utilisez juste <<'plutôt que <='. –

Répondre

1

Vous pouvez utiliser TRONQUE le jour suivant à savoir SYSDATE + 1, puis soustraire 60 secondes pour obtenir à savoir 60/86400 la sortie désirée.

SQL> SELECT to_char((trunc(last_day(sysdate)) +1) - 60/86400,'DD-Mon-YYYY HH24:MI:SS') dt 
    2 FROM dual; 

DT 
-------------------- 
29-Feb-2016 23:59:00 

SQL> 

Vous pouvez également utiliser interval '1' minute ou interval '60' second au lieu de 60/86400.

0

Si vous voulez juste pour affichage pour une raison quelconque, vous pouvez coder en dur le temps dans le masque de format:

select to_char(last_day(sysdate), 'DD-Mon-YYYY "23:59:00"') from dual; 

Mais vous avez probablement voulez vraiment comme un objet date, auquel cas vous peut ajouter 23 heures et 59 minutes à la tronqué (minuit) la date, wchi est 1439 des 1440 minutes dans une journée:

select to_char(trunc(last_day(sysdate)) + 1439/1440, 'DD-Mon-YYYY HH24:MI:SS') 
from dual; 

Ou vous pouvez aller le lendemain et supprimer une minute, que ce soit avec les jours fractionnaires ou avec des intervalles:

select to_char(trunc(last_day(sysdate)) + interval '1' day - interval '1' minute, 
    'DD-Mon-YYYY HH24:MI:SS') from dual; 

En général, si vous travaillez avec des périodes de temps que vous souhaitez inclure jusqu'à 23:59:59, que vous pouvez également faire avec l'une de ces méthodes, mais comme Damien_The_Unbeliever dit dans un commentaire, il est plus facile de comparer avec le début de la période suivante (par exemple < add_months(trunc(sysdate, 'MM'), 1). Il est facile de manquer accidentellement une partie de la journée en ne prenant pas correctement en compte le temps, en particulier si vous avez réellement un horodatage plutôt qu'une date.