mysql 生成当年从第一天到今日的连续天数

本文介绍了一种使用SQL语句生成从当前时间前某一天开始的连续日期的方法。通过巧妙利用MySQL的变量和函数,如DATE_SUB, ADDDATE及DATE_FORMAT等,结合自定义变量@num进行迭代计算,实现了日期序列的生成。需要注意的是,此查询依赖于follow表中的数据量,以确保生成足够数量的日期。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

查询当前时间前的连续日期

SELECT
@num := @num + 1,
DATE_FORMAT(
ADDDATE(
DATE_SUB(
(
SELECT
DATE_FORMAT(
DATE_SUB(
now(),
INTERVAL dayofyear(now()) - 1 DAY
),
‘%Y-%m-%d’
)
),
INTERVAL 1 DAY
),
INTERVAL @num DAY
),
‘%Y-%m-%d’
) AS time
FROM
follow,
(SELECT @num := 0) t
WHERE
ADDDATE(
(
SELECT
DATE_FORMAT(
DATE_SUB(
now(),
INTERVAL dayofyear(now()) - 1 DAY
),
‘%Y-%m-%d’
)
),
INTERVAL @num DAY
) <= DATE_FORMAT(now(), ‘%Y-%m-%d’)
ORDER BY
time;

由于生成的天数取决于follow表的数据条数,所以请确保follow 表中有足够的数据,比你生成的日期数据条数还多。

<think>我们想要查询今年的第一天,即1月1日。在MySQL中,我们可以使用一些日期函数来实现。一种方法是使用MAKEDATE(year,day)函数,它根据给定的年份和一年中的天数(1到366)创建一个日期。我们可以指定天数为1,即这一年的第一天。另一种方法是使用DATE_FORMAT或STR_TO_DATE来构造日期,但使用MAKEDATE更直接。步骤:1.获取当前年份:可以使用YEAR(CURDATE())来获取当前年份。2.使用MAKEDATE函数,传入当前年份和1(表示第一天)来生成日期。因此,查询语句可以写成:SELECTMAKEDATE(YEAR(CURDATE()),1)ASfirst_day_of_year;但是,注意:MAKEDATE函数在遇到无效参数时可能会返回NULL,比如年份为0。不过在我们这里,年份是当前年份,不会为0。另一种方法:使用CONCAT函数将年份和1月1日拼接起来,然后转换为日期。例如:SELECTSTR_TO_DATE(CONCAT(YEAR(CURDATE()),'-01-01'),'%Y-%m-%d')ASfirst_day_of_year;两种方法都可以,这里我们选择第一种,因为它更简洁。现在,我们给出完整的SQL语句。</think>### MySQL查询今年第一天 要查询今年的第一天(即1月1日),可以使用MySQL的日期函数组合实现: ```sql SELECT STR_TO_DATE(CONCAT(YEAR(CURDATE()), '-01-01'), '%Y-%m-%d') AS first_day_of_year; ``` #### 代码解释: 1. **`CURDATE()`** 获取当前日期(如2023-10-15)。 2. **`YEAR(CURDATE())`** 提取当前日期的年份(如2023)。 3. **`CONCAT(YEAR(...), '-01-01')`** 拼接年份和1月1日(如"2023-01-01")。 4. **`STR_TO_DATE(..., '%Y-%m-%d')`** 将字符串转换为标准的`DATE`类型(输出2023-01-01)。 #### 替代方案: ```sql SELECT MAKEDATE(YEAR(CURDATE()), 1) AS first_day_of_year; -- 直接按年份+天数生成日期 ``` 两种方法均返回**标准的DATE类型**结果(如`2023-01-01`),可直接用于日期比较或计算。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值