如何在 mysql 5.7 上显示从月份的第一个日期到 MYSQL 5.7 上的月底日期的日期? [复制]

Posted

技术标签:

【中文标题】如何在 mysql 5.7 上显示从月份的第一个日期到 MYSQL 5.7 上的月底日期的日期? [复制]【英文标题】:How to showing date on mysql 5.7 from first date of month until end date of month on MYSQL 5.7? [duplicate] 【发布时间】: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()))

谢谢你的回答

【问题讨论】:

【参考方案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,*** 旨在帮助和寻找更好的答案, 正如您在其他地方的 cmets 中承认的那样,您打开的断言不正确。 @Strawberry 好的... MySQL 5 不支持WITH... 版本 8 支持。更改了第一行以反映这一点 @Strawberry 你看到 OP explicit 引用 MySQL 5 了吗?在这种情况下,我的回答并不正确

以上是关于如何在 mysql 5.7 上显示从月份的第一个日期到 MYSQL 5.7 上的月底日期的日期? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如果日期早于当前月份,则将日期转换为当前月份的第一天

如何从 Mysql 8.0 转储到 5.7?

如何在sql中从给定的月份和年份获取月份的第一天和最后一天

MySQL中如何获得指定日期中月份的第一天是周几?

cal - 显示一个日历

从 MYSQL 上的时间戳中提取日/月/年