转载MySQL函数
来源:互联网 发布:没u盘怎么装windows 编辑:程序博客网 时间:2024/06/07 06:25
方法一
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)
这样计算出的年龄离实际的周岁最接近了,但可能方法四是最符合年龄定义的了。
作者:Y橡树Y
链接:http://www.jianshu.com/p/64b53c26bea1
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
方法一:
timer 定时器 调用 存储过程 让当天过生日的人 年龄+1 定时器 定在半夜1~2点就好了,上线人最少的时候。
方法二:
为什么不在显示的时候 newdate 和 生日 比较 得出年龄再显示。 数据库还能少个字段。
阅读全文
0 0
- mysql字符串函数(转载)
- mysql字符串函数(转载)
- mysql字符串函数(转载)
- 转载MySQL函数
- mysql常用函数汇总(转载)
- 【转载】MySQL日期时间函数大全
- mysql时间函数-- 转载http://laotu5i0.iteye.com/blog/691126
- MySQL与Oracle 差异比较之三函数--转载
- MySQL从头至尾汇总(6.函数篇-转载,修正)
- [转载] mysql
- mysql 时间函数 --转载http://www.webasp.net/article/25/24538.htm
- mysql管理(转载)
- 转载:MySQL集群配置
- 转载:mysql+linux
- MYSQL常用命令(转载)
- MySQL 5.0 触发器 (转载)
- linux mysql 转载
- MYSQL 字符集问题[转载]
- SSL2785 2017年10月23日提高组T1 询问 (二分+并查集)
- 13.线程安全与锁优化
- C语言中%d %.2d %2d %02d的区别
- Codeforces Round #442 (Div. 2) ABCDE
- Oc 二维码的生成
- 转载MySQL函数
- 设计模式之抽象工厂模式
- 完全背包
- 安装ruby遇到Error running '__rvm_make -j 1'错误解决办法
- 1113. Integer Set Partition (25)
- 使用sklearn做单机特征工程
- hdu1010 Tempter of the Bone
- Oc 二维码的扫描-ZBar与生成
- 从无到有环境配置(linux_ubuntu)