共计 1326 个字符,预计需要花费 4 分钟才能阅读完成。
自动写代码机器人,免费开通
这篇文章主要为大家展示了“Mysql 中如何通过生日计算年龄”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让丸趣 TV 小编带领大家一起研究并学习一下“Mysql 中如何通过生日计算年龄”这篇文章吧。
方法一
SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(birthday)), %Y )+0 AS age
方法一,作者也说出了缺陷,就是当日期为未来日期时结果为 0,而不是负数;这里使用了 5 个函数和两个运算符。
方法二
SELECT DATE_FORMAT(NOW(), %Y ) - DATE_FORMAT(birthday, %Y) - (DATE_FORMAT(NOW(), 00-%m-%d ) DATE_FORMAT(birthday, 00-%m-%d)) AS age
方法二,解决了方法一为负数的问题,但看起来更复杂;这里使用了 6 个函数和 3 个运算符。
看了这篇贴子后,我就晕了,怎么会这么复杂,以前用 Sql Server 很简单就可以了。我坚信一定有简单高效的方法。很快就找到了根据以上方法改良后的方法。
改良后方法一和方法二
SELECT year( from_days( datediff( now( ), birthdate)));
SELECT YEAR(CURDATE())-YEAR(birthday)-(RIGHT(CURDATE(),5) RIGHT(birthday,5));
改良后的方法一,少了一个函数和一个运算符,当日期为未来日期时计算结果还是为 0;
改良后的方法二,还是 6 个函数和 3 个运算符,看起来简单些;取日期的右边五位,当日期格式为‘2013-01-01 时取到的是‘01-01,没有问题;当日期格式为‘2013-1-1 缩写格式时,取右边的五位取出的是‘3-1-1,会导致出错。
然后自己根据 MYSQL 的帮助文档中的日期函数想到了第三种方法:
方法三
SELECT FLOOR(DATEDIFF(CURDATE(), @birthday)/365.2422)
取生日和当前日期之前的天数除以一年的实际天数(365 天 5 小时 48 分 46 秒),然后取整。这样只用了三个函数和一个运算符就搞定了。
然后,很快在国外网站找到了第四种方法:
方法四
SELECT TIMESTAMPDIFF(YEAR, @birthday, CURDATE())
这种方法只用了两个函数就搞定了,应该是最佳方法了。
测试了一下以上四种方法,假如当前日期为 2017-1-13,当生日为‘2013-1-14 时,还差一天就要过生日了,离 4 岁只 差一天了,结果还是 3 岁,感觉不是很合理;把方法三改造一下,四舍五入得到方法五:
方法五
SELECT ROUND(DATEDIFF(CURDATE(), @birthday)/365.2422)
这样计算出的年龄离实际的周岁最接近了,但可能方法四是最符合年龄定义的了。
以上是“Mysql 中如何通过生日计算年龄”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!
向 AI 问一下细节