sql 计算年龄

各种数据库在计算年龄的时候方法还真不一样,我给你捋一捋。
首先是MySQL,他们推荐用TIMESTAMPDIFF函数,代码就是SELECTTIMESTAMPDIFF(YEAR,birth_date,CURDATE())ASageFROMusers;,这个函数特别智能,能自动判断你生日过了没。
还有个日期格式比较法,用SELECTYEAR(CURDATE())-YEAR(birth_date)-(DATE_FORMAT(CURDATE(),'%m%d')SQL Server那边呢,用的是DATEDIFF+条件判断,代码是SELECTDATEDIFF(YEAR,birth_date,GETDATE())-CASEWHENDATEADD(YEAR,DATEDIFF(YEAR,birth_date,GETDATE()),birth_date)>GETDATE()THEN1 ELSE0ENDASageFROMusers;,先算年份差,然后看你生日是不是还没到,如果没到就减1 另外还有个天数差除3 6 5 .2 5 的方法,SELECTFLOOR(DATEDIFF(DAY,birth_date,GETDATE())/3 6 5 .2 5 )ASageFROMusers;。
Hive的话,是SELECTYEAR(CURRENT_DATE)-YEAR(TO_DATE(birth_date))-CASEWHENMONTH(CURRENT_DATE)总的来说呢,要注意birth_date得是DATE类型,别让字符串格式给你整错了。
要是出生日期是未来的日子,MySQL的TIMESTAMPDIFF会返回负数,这时候可以用CASE语句把它变成0,比如SELECTCASEWHENTIMESTAMPDIFF(YEAR,birth_date,CURDATE())>=0THENTIMESTAMPDIFF(YEAR,birth_date,CURDATE())ELSE0ENDASageFROMusers;。
算大表的时候,建议用索引或者预处理字段,这样能减少重复计算。

sql数据库中要求查询年龄在30(某个年龄)岁以上的员工信息,表中只有出生日期

嘿,知道怎么在SQL数据库里找出那些已经3 0岁以上的员工信息吗?其实方法还挺多,得看你用的是哪种数据库了。
比如,要是你在Oracle数据库上,就可以用这个查询:SELECT FROM 表 WHERE MONTHS_BETWEEN(sysdate,出生日期) > 3 0 1 2 这里,MONTHS_BETWEEN函数就是用来算出你和员工生日之间的月差,然后和3 0岁对应的月数(也就是3 6 0个月)比一比。

如果你用的是SQL Server,那可以用这个:SELECT FROM 表 WHERE DATEDIFF(yy,出生日期,GETDATE()) > 3 0。
这里的DATEDIFF函数会帮你算出两个日期之间的年份差,yy参数就是按照年计算的,而GETDATE()就是获取当前的日期。

不管用哪种方法,记得检查你的表名和字段名别搞错了,不然数据可就找不到了。
还有啊,数据库里的日期格式和你的查询语句里得一致,这样才能保证结果准确无误。

要是你还想加点别的筛选条件,比如按部门或者职位来查,直接在WHERE子句里再加条件就行。
比如这样:SELECT FROM 表 WHERE DATEDIFF(yy,出生日期,GETDATE()) > 3 0 AND 部门 = '销售',这样一来,你就能锁定那些既超过3 0岁又在销售部的员工了。

最后,别忘了优化你的查询语句,尤其是当你处理的数据量很大时。
确保查询语句写得尽可能高效,这样就能避免长时间等待结果了。