SELECT FLOOR(DATEDIFF(CURDATE(), STR_TO_DATE(birthday, '%Y-%m-%d'))/365) AS age FROM table_name
拓展:MySQL中可以使用TIMESTAMPDIFF函数根据出生日期计算年龄,它接受5个参数:
TIMESTAMPDIFF(unit, datetime_expr1, datetime_expr2, [datetime_expr3], [datetime_expr4])
unit参数可以是YEAR,QUARTER,MONTH,WEEK,DAY,HOUR,MINUTE,SECOND中的任何一个,代表了计算结果的单位。
报错是因为 没有这个方法可能的原因是 1 方法是自定义的 你当前数据库中没有写入这个方法
2 这个方法是官方的但是 版本号不同 这个方法被取消了
解决的方法 1 写入这个方法调用 2 更换 对应版本的 mysql
终于暂时闲下来了,一个项目加班加点一年多,前面太忙就顾不上博客了,慢慢的就懈怠了,最近算是暂时闲下来了,项目已经验收进入后期维护阶段,每天空余的时间也多了,想重新拾起博客,不求写什么高深的东西,以后就尽量就每次自己遇到的问题,并把解决方法在这里记录一下,可能显得很简单不适合他人看,但是就当自己日记一样记录还是不错的,因为在这个项目里我有好几次遇到类似的以前解决过的问题,却还是要看了自己当初的百度提问才得以解答,还是要记录下比较好。这次要记录的是昨天客户找我要一个关于注册用户年龄段,性别分布情况,当时把我卡住了,等到解决了才发现其实这个sql我大二考试的时候就写过,只是把以前是班级现在是年龄,以前是sqlserver现在是mysql而已,话不多说,解决过程如下:
首先,是我们数据库的当前内容:
然后我们要给他最终统计成三个字段:年龄男女
需要的最终统计结果图如下:
步骤1:我们要把先他统计成 年龄,性别 的结果
sql:
SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(birthday)), '%Y')+0 AS age,t1.sex
FROM test t1
ORDER BY age
其结果如下:
步骤2:将上图的结果作为临时表,再统计成最终结果图
sql:
SELECT CONCAT(age,'岁') AS '年龄',SUM(CASE WHEN sex='男' THEN 1 ELSE 0 END) AS '男',SUM(CASE WHEN sex='女' THEN 1 ELSE 0 END) AS '女'
FROM
(
SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(birthday)), '%Y')+0 AS age,t1.sex
FROM test t1
ORDER BY age
) AS tt
GROUP BY age
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)