sql根据出生年月计算年龄

sql根据出生年月计算年龄,第1张

SQL计算年龄

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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5910032.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-08
下一篇 2023-03-08

发表评论

登录后才能评论

评论列表(0条)

保存