带有月份时间的最后日期

Last date with time of the month

需要您的帮助来完成查询以获取 sysdate 月份的最后一个日期时间。

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

它给出了预期的最后日期,但我需要时间作为 23:59:00,这是不可能通过上述查询实现的。

您可以在第二天使用 TRUNCSYSDATE + 1,然后减去 60 秒即 60/86400 以获得所需的输出。

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>

您也可以使用 interval '1' minuteinterval '60' second 代替 60/86400

如果您出于某种原因只想 显示 ,您可以将时间硬编码到格式掩码中:

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

但您可能真的希望它作为日期对象,在这种情况下,您可以在截断的(午夜)日期上加上 23 小时 59 分钟,wchi 是一天 1440 分钟中的 1439 分钟:

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

或者您可以转到第二天并删除一分钟,可以是小数天数,也可以是间隔:

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

通常,如果您要处理的时间段最多要包括 23:59:59,您也可以使用这些方法中的任何一种,但正如 Damien_The_Unbeliever 在评论中所说,它是更容易与下一个时期的开始进行比较(例如 < add_months(trunc(sysdate, 'MM'), 1)。如果没有正确考虑时间,很容易意外错过一天的一部分,特别是如果您实际上有时间戳而不是日期。