【问题标题】:How to get last day of a month from a given date?如何从给定日期获取一个月的最后一天?
【发布时间】:2026-01-18 18:30:01
【问题描述】:

例如,给定日期是 04/04/1924,我想找出 1924 年 2 月的最后一天。

我想出了 add_month,但如果我的给定月份与数据源不同,它似乎不灵活

有什么好主意吗?

【问题讨论】:

  • 04/04/1924 --> 这里的 04 代表 4 月而不是 2 月你想要 2 个月前的最后一天吗

标签: oracle plsql


【解决方案1】:

Oracle 有一个last_day() 函数:

SELECT LAST_DAY(to_date('04/04/1924','MM/DD/YYYY')) from dual;

SELECT LAST_DAY(ADD_MONTHS(to_date('04/04/1924','MM/DD/YYYY'), -1)) from dual;

SELECT LAST_DAY(ADD_MONTHS(to_date('04/04/1924','MM/DD/YYYY'), -2)) from dual;

结果:

April, 30 1924 00:00:00+0000

March, 31 1924 00:00:00+0000

February, 29 1924 00:00:00+0000

在您的日期使用Add_Months() 以获得适当的月份,然后应用last_day()

【讨论】:

  • 会的,是的。它会work with a fair few other things as well,虽然它真的很令人困惑......而且它的工作部分是一个意外。 Oracle 的内部结构恕我直言,从日期格式中删除了太多数据。有时会绊倒我;烦人。如果您愿意,请随时回滚:-)。
【解决方案2】:

查询 inpl sql 以获取当月的第一天和最后一天:

第一天:

select to_date(to_char(LAST_DAY(sysdate),'YYYYMM'),'YYYYMM')  from dual;

最后一天:

select LAST_DAY(to_date(to_char((sysdate),'YYYYMM'),'YYYYMM'))  from dual;

【讨论】:

    【解决方案3】:

    这将显示一个月的最后一天

    SELECT  Max(LAST_DAY(ADD_MONTHS(SYSDATE, -2)) + level)
    FROM    dual
    CONNECT BY
        level <= LAST_DAY(ADD_MONTHS(SYSDATE, -1)) - LAST_DAY(ADD_MONTHS(SYSDATE, -2))
    

    你可以用 to_date('04/04/1924','MM-DD-YYYY') 替换你想要的任何日期的系统日期

    SELECT  Max(LAST_DAY(ADD_MONTHS(to_date('04/04/1924','MM-DD-YYYY'), -2)) + level)
    FROM    dual
    CONNECT BY
        level <= LAST_DAY(ADD_MONTHS(to_date('04/04/1924','MM-DD-YYYY'), -1)) - LAST_DAY(ADD_MONTHS(to_date('04/04/1924','MM-DD-YYYY'), -2))
    

    或者干脆

    select LAST_DAY(ADD_MONTHS(to_date('04/04/1924','MM-DD-YYYY'), -2)) from dual;
    

    【讨论】:

    • 我没见过。我处于编辑模式,绝对你的事情是正确的。我给你的答案 +1
    【解决方案4】:

    获取所选月份和年份的最后一天:

    从 DUAL 中选择 TO_CHAR(LAST_DAY(TO_DATE(:X_THE_MONTH ||'/01/' || :X_THE_YEAR,'MM/DD/YYYY')), 'dd')

    【讨论】:

      【解决方案5】:

      如果您想知道您的日期是否是最终安装日期

      SELECT
      case when
      TO_DATE('19240430','YYYYMMDD') = LAST_DAY(TO_DATE('04/04/1924','MM/DD/YYYY'))
      THEN 1 ELSE 0 END LAST_MOUNTH_DAY FROM DUAL
      

      【讨论】:

        【解决方案6】:

        获取当月的第一个和最后一个日期 只需更改月份数​​字即可获取该月的第一个和最后一个日期

         select
          to_date('01/'|| '07/' || to_char(sysdate, 'YYYY'), 'dd/mm/yyyy') first,
          last_day(to_date('01/'|| '07/' || to_char(sysdate, 'YYYY'), 'dd/mm/yyyy')) last
          from  dual
        

        结果:

        first         last
        -------------------------- 
        01/02/2017  28/02/2017
        

        【讨论】:

          【解决方案7】:

          简单的方法是:

          select first_name , last_day(hire_date) from employees;
          

          我正在使用 HR 模式...您可以获得上述月份的最后一天。

          【讨论】:

            最近更新 更多