如何在 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 上的月底日期的日期? [复制]的主要内容,如果未能解决你的问题,请参考以下文章