如何将本月的最后一天设为晚上11:59:59?现在它显示为05/31/2019 12:00 AM。如果我只是执行sysdate,它将显示我运行它的时间。谢谢。
LAST_DAY(TRUNC(SYSDATE,'MM'))
答案 0 :(得分:4)
尝试在当月的最后一天增加一天,然后减去一分钟:
SELECT
LAST_DAY(TRUNC(SYSDATE,'MM')) + INTERVAL '1' DAY - INTERVAL '1' SECOND
FROM dual;
或者,如果您还想查看时间部分,请使用CURRENT_TIMESTAMP
代替SYSDATE
:
SELECT
LAST_DAY(TRUNC(CURRENT_TIMESTAMP,'MM')) + INTERVAL '1' DAY - INTERVAL '1' SECOND
FROM dual;
此输出:
30.06.2019 23:59:59
答案 1 :(得分:0)
基于@Tim Biegeleisen的答案,您可以使用 SECOND 代替 MINUTE :
SELECT
LAST_DAY(TRUNC(SYSDATE,'MM')) + INTERVAL '1' DAY - INTERVAL '1' SECOND
FROM dual;
或者您可以使用CONCAT来添加所需的精确文本:
SELECT
CONCAT(LAST_DAY(TRUNC(SYSDATE,'MM')),' 11:59:59 pm')
FROM dual;
答案 2 :(得分:0)
oldfashioned 方法是从一天中减去一秒(1 / (24*60*60)
代表一天中有24小时,一小时中有60分钟和一分钟中有60秒)下个月的第一天(trunc(add_months(sysdate, 1))
就是这样做的):
SQL> select sysdate today,
2 trunc(add_months(sysdate, 1)) - 1/(24*60*60) result
3 from dual;
TODAY RESULT
---------------------- ----------------------
06/01/2019 07:52:40 AM 06/30/2019 11:59:59 PM
SQL>
答案 3 :(得分:0)
我会使用:
SELECT TRUNC(SYSDATE, 'MM') + INTERVAL '1' MONTH - INTERVAL '1' SECOND
FROM dual;
(这比Tim的解决方案少了一步。)
或使用较旧的方法:
SELECT ADD_MONTHS(TRUNC(SYSDATE, 'MM'), 1) - 1/(24*60*60)
如果将其转换为时间戳,则会看到时间值:
SELECT CAST(TRUNC(sysdate, 'MM') + INTERVAL '1' MONTH - INTERVAL '1' SECOND as TIMESTAMP)
FROM dual;