SQL语句如何根据出生日期计算年龄

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL语句如何根据出生日期计算年龄相关的知识,希望对你有一定的参考价值。

update A set B= case Len(Rtrim(C)) when 15 then '19' + SubString(C,7,2) + '-' + SubString(C,9,2) + '-' + SubString(C,11,2) when 18 then SubString(C,7,4) + '-' + SubString(C,11,2) + '-' + SubString(C,13,2) else A0111 end
上面的语句算出来出生日期怎么在里面加语句计算出年龄了,个位大侠帮帮忙啊,谢谢了。

1、计算年龄其实就是计算当前日期和出生日期之间的差值

2、SQL计算时间差值使用的函数是:Datediff()

    定义和用法:

    DATEDIFF() 函数返回两个日期之间的天数。

    语法:

    DATEDIFF(datepart,startdate,enddate)

    startdate 和 enddate 参数是合法的日期表达式。

    datepart 参数可以是下列的值:

    datepart--缩写

    年--yy或yyyy

    季度--qq或q

    月--mm或m

    年中的日--dy或y

    日--dd或d

    周--wk或ww

    星期--dw或w

    小时--hh

    分钟--mi或n

    秒--ss或s

    毫秒--ms

    微妙--mcs

    纳秒--ns

    示例:

SELECT DATEDIFF(day,\'2008-12-29\',\'2008-12-30\') AS DiffDate

    结果:

DiffDate
1

3、那么依据出生日期计算年龄就可以这么写(假设表名为table_1,出生日期列为:BirthDate_col):

select 
    datediff(yy,BirthDate_col,getdate()) as 周岁
    ,(datediff(yy,BirthDate_col,getdate())+1) as 虚岁
from 
    table_1
参考技术A 第一种:
一张人员信息表里有一人生日(Birthday)列,跟据这个列,算出该人员的年龄
datediff(year,birthday,getdate())
例:birthday = '2003-3-8'
getDate()= '2008-7-7'
结果为:5
这样结果是会返回该人员的大概年龄,但不精确.不会精确到月或日.
按照上面测试的日期,该人员的实际年龄应该还不满5岁。在需要精确年龄的时候,就会有错.
第二种:
FLOOR(datediff(DY,birthday,getdate())/365.25)
FLOOR函数:
FLOOR(expr) 返回小于或等于expr的最大整数.FLOOR(1.1)返回1,FLOOR(-1.1)返回-2,FLOOR(1)返回1
这样就可以精确算出,该人员当前实际年龄了.
测试:
birthday = '2000-7-8'
getdate()= '2007-7-7'
算出结果为:6

在Oracle中,要获得日期中的年份,例如把sysdate中的年份取出来。
一种常用的方法是:to_number(to_char(sysdate,'yyyy'))
还有一种更好的方法,那就是使用oracle提供的Extract函数,使用方法是:
extract(year from sysdate) ,此方法获得的结果是数值型的 ,这种方法省掉了类型转换,更加简洁。
相应的,要取得月份或日,可以用extract (month from sysdate) 和extract (day from sysdate)
参考技术B 出生日期求出来了是吧,求当前时间与生日时间相差多少个月,再除12就可以了,问下你用的是oracle,还是sql server,如果是oracle如下样例,sql server应该也有类似的函数,除12后根据需要是取整还是四舍五入。

select months_between(sysdate,date'1986-12-7')/12 from dual;追问

sql server的了,我知道计算年龄是 select datediff(yy,B,getdate()) from A
但能不能把它们合并成一句了?

追答

你是说拼到update语句中去,这个应该是可以的。

追问

那怎么拼了,楼上的那位我算出的结果是这样了,这不是年龄了

参考技术C 使用datediff函数
select datediff(year,'1988.1.1',getdate())
这是计算1988年出生人的年龄追问

能不能合并成一句了?

追答

应该可以

update A set B= datediff(year,convert(datetime,case Len(Rtrim(C)) when 15 then '19' + SubString(C,7,2) + '-' + SubString(C,9,2) + '-' + SubString(C,11,2) when 18 then SubString(C,7,4) + '-' + SubString(C,11,2) + '-' + SubString(C,13,2) else A0111 end
),getdate())
想法是先转换成日期类型,再与getdate()来计算

追问

不行额,算出来的结果是这样了

参考技术D SELECT CAST( DATEDIFF(CURRENT_DATE(),'1988-08-09') /365 AS SIGNED )
FROM DUAL;

如何用SQL语句把出生日期计算年龄,比如是1984-2-16怎么算出年龄啊

语句为:SELECT FLOOR(DATEDIFF(CURRENT_DATE,'1984-2-16')/356)

常用sql对数据库操作:

    连接数据库命令: mysql -u root -p密码

    创建数据库:create database dbname;

    查看所有的数据库:show databases;

    删除数据库: drop database dbname;

    切换数据库:use dbname;


知识拓展:

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。

参考技术A 可以用日期函数datediff计算出生日期与当前日期相差的年数
如datediff(year,'1984-2-16',getdate())
人活一辈子,就活一颗心,心好了,一切就都好了,心强大了,一切问题,都不是问题。

  人的心,虽然只有拳头般大小,当它强大的时候,其力量是无穷无尽的,可以战胜一切,当它脆弱的时候,特别容易受伤,容易多愁善感。

  心,是我们的根,是我们的本,我们要努力修炼自己的心,让它变得越来越强大,因为只有内心强大,方可治愈一切。

  没有强大的敌人,只有不够强大的自己

  人生,是一场自己和自己的较量,说到底,是自己与心的较量。如果你能够打开自己的内心,积极乐观的去生活,你会发现,生活并没有想象的那么糟糕。

  面对不容易的生活,我们要不断强大自己的内心,没人扶的时候,一定要靠自己站稳了,只要你站稳了,生活就无法将你撂倒。

  人活着要明白,这个世界,没有强大的敌人,只有不够强大的自己,如果你对现在的生活不满意,千万别抱怨,努力强大自己的内心,才是我们唯一的出路。

  只要你内心足够强大,人生就没有过不去的坎

  人生路上,坎坎坷坷,磕磕绊绊,如果你内心不够强大,那这些坎坎坷坷,磕磕绊绊,都会成为你人生路上,一道道过不去的坎,你会走得异常艰难。

  人生的坎,不好过,特别是心坎,最难过,过了这道坎,还有下道坎,过了这一关,还有下一关。面对这些关关坎坎,我们必须勇敢往前走,即使心里感到害怕,也要硬着头皮往前冲。

  人生没有过不去的坎,只要你勇敢,只要内心足够强大,一切都会过去的,不信,你回过头来看看,你已经跨过了多少坎坷,闯过了多少关。

  内心强大,是治愈一切的良方

  面对生活的不如意,面对情感的波折,面对工作上的糟心,你是否心烦意乱?是否焦躁不安?如果是,请一定要强大自己的内心,因为内心强大,是治愈一切的良方。

  当你的内心,变得足够强大,一切困难,皆可战胜,一切问题,皆可解决。心强则胜,心弱则败,很多时候,打败我们的,不是生活的不如意,也不是情感的波折,更不是工作上的糟心,而是我们内心的脆弱。

  真的,我从来不怕现实太残酷,就怕自己不够勇敢,我从来不怕生活太苦太难,就怕自己不够坚强。我相信,只要我们的内心,变得足够强大,人生就没有那么多鸡毛蒜皮。

  强大自己的内心,我们才能越活越好

  生活的美好,在于追求美好的生活,而美好的生活,源于一颗强大的内心,因为只有内心强大的人,才能消化掉各种不顺心,各种不如意,将阴霾驱散,让美好留在心中。

  心中有美好,生活才美好,心中有阳光,人生才芬芳。一颗阴暗的心,托不起一张灿烂的脸,一颗强大的心,可以美化生活,精彩人生,让我们越活越好。

  生活有点欺软怕硬,如果你内心很脆弱,生活就会打压你,甚至折磨你,如果你内心足够强大,生活就会奖励你,眷顾你,全世界都会对你和颜悦色。
参考技术B

计算年龄就是,计算当前时间与出生日期的年份差的过程,所以用到DATEDIFF 函数。

一、DATEDIFF 函数简介

1、函数功能:返回两个日期之间的间隔指定单位值。

2、语法:DATEDIFF ( date-part, date-expression-1, date-expression-2 )

date-part :指定要测量其间隔的日期部分,常用参数说明

date-expression-1 某一间隔的起始日期。

date-expression-2 某一间隔的结束日期。

函数返回值:从date-expression-2 值中减去 Date-expression-1,返回两个参数之间 date-parts 的值。

3、范例演示:

SELECT datediff( hh, '4:00AM', '5:50AM' )下面的语句返回 102:
SELECT datediff( mm, '1987/05/02', '1995/11/15' )下面的语句返回 0:
SELECT datediff( dd, '00:00', '23:59' )下面的语句返回 4:
SELECT datediff( dd,'1999/07/19 00:00','1999/07/23 23:59' )下面的语句返回 0:
SELECT datediff( mm, '1999/07/19', '1999/07/23' )下面的语句返回 1:
SELECT datediff( mm, '1999/07/19', '1999/08/23' )

二、通过出生日期计算年龄的实例

1、实例表格:a_test

2、SQL语句如下:

select bh,rq,
case when datediff(yy,rq,getdate()) = 0                   
then cast(datediff(mm,rq,getdate()) as char(3))  +'个月'  
else cast(datediff(yy,rq,getdate()) as char(3))  +'岁'    
end  as '年龄'                                           
from a_test;

语句解析:语句主体部分

case when datediff(yy,rq,getdate()) = 0                  
then cast(datediff(mm,rq,getdate()) as char(3))  +'个月'  
else cast(datediff(yy,rq,getdate()) as char(3))  +'岁'    
end  as '年龄'

datediff函数计算出生日期rq与系统当前时间getdate()的年份差值,如果差值大于0,就计算月份差,显示月份为年龄。

语句结果如图:  

参考技术C 可以用日期函数datediff计算出生日期与当前日期相差的年数
如datediff(year,'1984-2-16',getdate())追问

我不需要很详细的时间,按照这个写出来的不是年龄啊。还有这个要怎么写啊

追答

这只是获得两个日期之前的年数,应该就是年龄了,你要的是什麼?

追问

select datediff(year,’1984-2-16’getdate()) as '年龄' from BD_StudentInformation对不对

追答

你的出生日期不是一个字段吗?
将如下出生日期字段换成实际的字段名即可

select datediff(year,出生日期字段,getdate()) as 年龄 from BD_StudentInformation

追问

额。。。什么叫出生日期的字段啊。。。

追答

你是不是查BD_StudentInformation表中每个学生的年龄?
BD_StudentInformation中应该有一个字段是记录学生年龄的吧

追问

select datediff(year,’BD_StudentInformationyear’getdate()) as '年龄' from BD_StudentInformatio 对吧

追答

select datediff(year,BD_StudentInformationyear,getdate()) as ‘年龄’ from BD_StudentInformatio
不用加引号,且getdate()前是要加逗号分开的

本回答被提问者采纳
参考技术D ,if( substring(FROM_UNIXTIME(UNIX_TIMESTAMP('$y_date','yyyy-MM-dd'), 'yyyyMMdd'),5) >= substring(a.ZCSDAT,5) ,
substring(FROM_UNIXTIME(UNIX_TIMESTAMP('$y_date','yyyy-MM-dd'), 'yyyyMMdd'),1,4) - substring(a.ZCSDAT,1,4),
substring(FROM_UNIXTIME(UNIX_TIMESTAMP('$y_date','yyyy-MM-dd'), 'yyyyMMdd'),1,4) - substring(a.ZCSDAT,1,4)-1
) AS EMP_AGE --年龄: 跑数月日 >= 出生月日 ,年份差 ,否则年份差-1

以上是关于SQL语句如何根据出生日期计算年龄的主要内容,如果未能解决你的问题,请参考以下文章

如何用SQL语句把出生日期计算年龄,比如是1984-2-16怎么算出年龄啊

sql根据身份证计算年龄。

SQL由身份证号计算出生日期和年龄

Oracle 根据出生日期计算年龄

根据出生年份计算年龄的公式,如何根据出生日期求年龄?

SQL计算年龄