每月的最后一天/时间

时间:2019-06-01 03:50:57

标签: sql oracle

如何将本月的最后一天设为晚上11:59:59?现在它显示为05/31/2019 12:00 AM。如果我只是执行sysdate,它将显示我运行它的时间。谢谢。

LAST_DAY(TRUNC(SYSDATE,'MM'))

4 个答案:

答案 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;