You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL查询问题:如何计算并筛选18-25岁的人员数据

解决SQL筛选18-25岁人员的问题

错误原因

你写的SQL报错是因为WHERE子句里把函数名TIMESTAMPDIFF当成列名用了,数据库找不到这个列,所以抛出#1054错误。

正确的单条查询写法

不需要拆分多条查询,单条语句就能实现需求,下面是几种可行写法:

写法一:WHERE子句直接计算年龄

直接在WHERE里完整调用函数计算年龄,再做范围判断:

SELECT name, TIMESTAMPDIFF(YEAR, birthday, CURDATE()) AS age
FROM personnel
WHERE TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 18 AND 25;

写法二:用HAVING过滤别名

MySQL的WHERE不能直接用SELECT里定义的别名,改用HAVING可以直接用别名筛选(适用于MySQL 5.7+,或关闭ONLY_FULL_GROUP_BY模式):

SELECT name, TIMESTAMPDIFF(YEAR, birthday, CURDATE()) AS age
FROM personnel
HAVING age BETWEEN 18 AND 25;

写法三:子查询包装

通过子查询先算出年龄,再在外层筛选:

SELECT name, age
FROM (
    SELECT name, TIMESTAMPDIFF(YEAR, birthday, CURDATE()) AS age
    FROM personnel
) AS temp_table
WHERE age BETWEEN 18 AND 25;

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 16:30:49