上个日期与月份的时间

时间:2016-02-23 11:19:05

标签: sql oracle datetime date-arithmetic

需要您的帮助来结束查询以获取sysdate月的最后日期时间。

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

它按预期提供了最后一个日期,但我需要时间23:59:00,这是通过上述查询无法实现的。

2 个答案:

答案 0 :(得分:1)

您可以在第二天使用 TRUNC ,即SYSDATE + 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

答案 1 :(得分:0)

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

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)。如果没有正确地考虑时间,很容易意外地错过一天的部分时间,特别是如果你实际上有时间戳而不是日期。