【问题标题】:How to showing date on mysql 5.7 from first date of month until end date of month on MYSQL 5.7? [duplicate]如何在 mysql 5.7 上显示从月份的第一个日期到 MYSQL 5.7 上的月底日期的日期? [复制]
【发布时间】:2021-04-22 23:13:50
【问题描述】:

我想问一下如何显示从月初到月底的日期 例如,我想显示从 2021-01-01 到 2021-01-30 的日期。我想将此数据与我的其他表连接起来。

我正在使用 MYSQL V5.7

我想要这个结果::

| 2019-01-01 |
| 2019-01-02 |
| 2019-01-03 |
| 2019-01-04 |
| 2019-01-05 |
| .......... |
| .......... |
| 2019-01-31 |

我尝试使用此查询但不起作用

SELECT DATE(DATE_SUB(CURRENT_DATE, INTERVAL DAYOFMONTH(CURRENT_DATE)-1 DAY) BETWEEN DATE(NOW()))

谢谢你的回答

【问题讨论】:

    标签: mysql sql database


    【解决方案1】:

    如果您的问题是如何返回单月的所有日期,您可以使用递归 CTE:

    with recursive dates as (
          select date('2021-01-01') as dte
          union all
          select dte + interval 1 day
          from dates
          where dte < last_day(dte)
         )
    select *
    from dates;
    

    这可以通过更改where 条件轻松扩展到其他日期范围。

    Here 是一个 dbfiddle。

    【讨论】:

    • 这是否适用于 MySQL!?哎呀!我已经过时了(很长时间不直接使用数据库服务器)
    • @Barranka 。 . .确实。我添加了一个 dbfiddle.
    • 它在 MYSQL 上工作,非常感谢
    • MYSQL 5.7版本怎么样?
    • 谢谢!每天学习新东西!
    【解决方案2】:

    旧版本的 MySQL 无法生成未存储在表中的行。我总是发现自己构建了一个“日期”表来完成这项工作。

    你可以使用这个过程:

    DELIMITER $$
    CREATE PROCEDURE fill_dates_table(start_date DATE, end_date DATE)
    BEGIN
      DECLARE d DATE;
      
      CREATE TABLE IF NOT EXISTS dates (
        date DATE NOT NULL PRIMARY KEY
      );
      SET d = start_date;
      WHILE d <= end_date DO
        INSERT IGNORE INTO dates VALUES (d);
        SET d = d + INTERVAL 1 DAY;
      END WHILE;
    END $$
    DELIMITER ;
    

    执行此过程:

    CALL fill_dates_table('2019-01-01', '2019-01-31');
    

    然后,使用您认为合适的dates 表。


    如果您使用的是版本 8,请考虑 Gordon 的回答。

    【讨论】:

    • 好吧,我想我们现在知道你知识的极限了!
    • @Strawberry 我的代码不正确吗?如果是这样,请帮助我(我们)改进它。 AFAIK,StackOverflow 旨在帮助和寻找更好的答案,
    • 正如您在其他地方的 cmets 中承认的那样,您打开的断言不正确。
    • @Strawberry 好的... MySQL 5 不支持WITH... 版本 8 支持。更改了第一行以反映这一点
    • @Strawberry 你看到 OP explicit 引用 MySQL 5 了吗?在这种情况下,我的回答并不正确
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    • 2017-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多