MySQL根据出生日期计算年龄的五种方法比较

这篇具有很好参考价值的文章主要介绍了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个运算符。


改良后方法一和方法二

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’,会导致出错。


方法三

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) 

这样计算出的年龄离实际的周岁最接近,但可能方法四最符合年龄定义。文章来源地址https://www.toymoban.com/news/detail-667407.html

到了这里,关于MySQL根据出生日期计算年龄的五种方法比较的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据库SQL函数 根据身份证号/出生年月 精确计算年龄(Oracle/MySQL)

    问题 根据身份证号统计年龄(18位) Oracle 思路 (1)Substr()函数在Oracle使用中表示被劫取的字符串表达式,截取字符串的内容。 (2)To_date()函数可以转换不同格式的日期,通过使用to_date函数可以将字符串类型的日期转换成date格式。 (3)Months_between()函数反悔两个日期之间的

    2024年02月11日
    浏览(47)
  • SQL由出生日期求年龄

    我们现在有一个学生关系表 通过语句: date_part(\\\'years\\\',age(生日))就可以求出年龄   解析: age(timestamp) 从现在时间 current_date() 减去参数(时间戳),结果返回类型为Intrval(xxyears xxmos xx days) data_part(field TEXT, source TIMESTAMP/DATE/TIME/INTERVAL) 从时间戳或时间间隔中提取特点部分并返回

    2024年02月05日
    浏览(42)
  • 数据库sql 根据身份证计算年龄段mysql、oracle

    mysql: mysql通过函数可以精确到日 结果: Oracle: oracle只是年份相减,不够精确 结果:

    2024年02月12日
    浏览(63)
  • 数组求和的五种方法

    // 数组求和的方法 let arr = [1,2,3,4,5] // 方法一:递归 function sum(arr){ const len = arr.length; if(len === 0) { return 0; } else if(len === 1){ return arr[0]; } else { return arr[0] + sum(arr.slice(1)); } } // 方法二:循环 function sum(arr) { let s = 0; for(let i=0; iarr.length; i++){ s += arr[i] } return s; } // 方法三:map-reduce

    2024年02月10日
    浏览(43)
  • mysql中insert语句的五种用法

    insert语句是标准sql中的语法,是插入数据的意思。在实际应用中,它也演变了很多种用法来实现特殊的功能,下面介绍在mysql数据库中insert语句的五种用法。 语法: 如果插入多条数据,需要写多条sql。 语法: 多条数据1条sql即可,相较于方法1效率更高。 语法: 多条数据使用

    2023年04月25日
    浏览(31)
  • Linux清空日志的五种方法

    在Linux中,有多种方法可以清空日志文件。下面是五种常用的方法: 使用truncate命令: truncate命令可以将文件截断为指定大小或清空文件内容。 示例:清空名为logfile.log的日志文件 使用cat命令重定向: cat命令可以将标准输入重定向到文件,使用空内容覆盖文件内容。 示例:

    2024年02月11日
    浏览(37)
  • Hive导入数据的五种方法

            在Hive中建表成功之后,就会在HDFS上创建一个与之对应的文件夹,且 文件夹名字就是表名 ; 文件夹父路径是由参数hive.metastore.warehouse.dir控制,默认值是/user/hive/warehouse; 也可以在建表的时候使用location语句指定任意路径。         不管路径在哪里,只有把数

    2024年01月18日
    浏览(37)
  • axios发送请求的五种方法详解

    1、带参数 // 方式一: //请求的地址为 localhost:8080/url?id=1         axios.get(\\\'/url\\\', {params: {id: 1}})   // 方式二: // 请求的地址为 localhost:8080/url?id=2 axios({     methods: \\\'get\\\',     url: \\\'/url\\\',     params: {         id: 2     } }) 2、不带参数 // 方式一:  axios({ methods: \\\'get\\\', url: \\\'/url\\\' }) // 方式二

    2024年04月25日
    浏览(34)
  • 隐藏服务器IP的五种方法

    随着互联网的不断发展,用户们在日常使用通信设备访问网站时的风险也在不断增大。因为IP 地址对 Internet 上的每个人都是可见的。根据 IP 地址,其他互联网用户可以跟踪用户的位置、用户使用哪个提供商连接到互联网等等。因此许多用户都在寻求隐藏IP地址的方法,翔域云

    2024年02月07日
    浏览(53)
  • linux杀死进程的五种方法(kill)

    添加链接描述 相关博主的链接; 方法一:通过kill 进程id的方式可以实现 首先需要知道进程id, 例如,想要杀死firefox的进程,通过 ps -ef|grep firefox,可以查到firefox的进程id: 然后通过 kill 3781 就可以关闭进程了. 补充: kill -9 来强制终止退出, 例如: kill -9 3781 特殊用法: kill -STOP [pid

    2024年02月02日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包