mysql与oracle根据生日时间计算生日

本文介绍如何使用MySQL和Oracle数据库中的SQL语句来精确计算用户的年龄,包括如何处理不同格式的日期字符串,以及利用months_between函数进行更精细的年龄计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mysql写法

SELECT user_id, birthday, CURDATE() nowaday,(YEAR(CURDATE())-YEAR(STR_TO_DATE(birthday,'%Y-%m-%d')))-((RIGHT(CURDATE(),5)<RIGHT(STR_TO_DATE(birthday,'%Y-%m-%d'),5))) age FROM sit_user where user_id = 8638

由于我这里存的是“yyyy-mm-dd”字符串保存的时间,所以写成上面这样,如果你存的生日时间字段是时间类型那么写法就是:

SELECT user_id, birthday, CURDATE() nowaday,(YEAR(CURDATE())-YEAR(birthday))-((RIGHT(CURDATE(),5)<RIGHT(birthday,5))) age FROM sit_user where user_id = 8638

切记一点:如果存的是字符串的话STR_TO_DATE(birthday,'%Y-%m-%d'),这里的格式化表达式’%Y-%m-%d’,开头必须大写,如果是yyyymmdd 这样的时间字符串那么你的格式化表达式就得把中间的“-”去掉,要符合他的格式化要求。

oracle

SELECT floor(months_between(SYSDATE, to_date('20141217','yyyy-mm-dd'))/ 12) a,--手工输入日期
       months_between(SYSDATE, u.modifydate) / 12 b,--从数据库取值计算月份
       floor(months_between(SYSDATE, u.modifydate) / 12) c--对月份向下取整,表示年龄
  FROM org_userinfo u;
算年龄可以精确到日。

months_between函数返回两个日期之间的月份数。如果两个日期月份内天数相同,或者都是某个月的最后一天,返回一个整数,否则,返回数值带小数,以每天1/31月来计算月中剩余天数。
floor(x),有时候也写做Floor(x),其功能是“向下取整”,或者说“向下舍入”,即取不大于x的最大整数(与“四舍五入”不同,下取整是直接取按照数轴上最接近要求的值左边的值,也就是不大于要求的值的最大的那个)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值