跨天/长耗时查询中SELECT CURDATE()是否返回多个值?
关于
CURDATE()在长时间跨天查询中的返回值问题 嘿,这个问题问到点子上了——很多人会误以为这类日期函数会随查询执行过程动态变化,但其实MySQL里的CURDATE()有个关键的执行特性,我给你掰扯清楚:
CURDATE()(包括类似的NOW()、CURTIME()这类函数)是在查询开始执行的瞬间就计算出固定值,之后不管你的查询跑多久,哪怕跨了一整天,整个查询生命周期里这个值都不会改变。
针对你的两个问题:
- 问题1:哪怕
SELECT CURDATE()的查询跨多天执行、耗时拉得很长,结果里只会返回一个固定值——就是查询启动那一刻的日期,绝不会出现多个值。 - 问题2:就算你在晚上11:59启动查询,跑了5分钟到次日凌晨,哪怕部分行在次日才被处理,结果集里的
CURDATE()也只会是查询启动时的当日日期,不会混进次日的日期。
举个直观的例子,假设你在2024-06-30 23:59:00执行这条查询:
SELECT user_id, CURDATE() AS query_date FROM huge_user_table;
哪怕这个查询直到2024-07-01 00:04:00才执行完毕,结果里所有行的query_date列都会是2024-06-30,不会有任何一行显示2024-07-01。
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

