需要您的帮助来结束查询以获取sysdate月的最后日期时间。
select to_char(last_day(sysdate),'DD-Mon-YYYY HH24:MI:SS') from dual
它按预期提供了最后一个日期,但我需要时间23:59:00
,这是通过上述查询无法实现的。
答案 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' minute
或interval '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)
。如果没有正确地考虑时间,很容易意外地错过一天的部分时间,特别是如果你实际上有时间戳而不是日期。