189 8069 5689

oracle年龄怎么计算 oracle 算年龄

Oracle PL/SQL 计算年龄

根据出生日期查询年龄用的还挺多的。

成都创新互联公司专业为企业提供永胜网站建设、永胜做网站、永胜网站设计、永胜网站制作等企业网站建设、网页设计与制作、永胜企业网站模板建站服务,10年永胜做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

简单分析一下,加入一个孩子五岁半了,那习惯认为他还是5岁。

用Oracle提供的months_between()函数,先获取出生日期和当前日期的月数,然后除以12向下取整:

使用的时候,将时间段替换成出生日期对应的字段即可。

如果,计算年龄用的次数非常多,最好写成自定义函数。

oracle 关于年龄计算问题?

用month_between做,应该会好一些。

select

当前日期,

出生日期,

trunc(months_between(当前日期,出生日期)/12) 年数,

trunc(months_between(当前日期,出生日期))%12 月数,

ceil(当前日期-add_month(出生日期,trunc(months_between(当前日期,出生日期))) 天数 from table

可能一些细微的地方还需要些调整,不过大体上应该差不多了。

最后那个ceil可能要分成两个case when的部分是

case when substr(to_char(当前日期,'yyyy-mm-dd'),-5) != substr(to_char(出生日期,'yyyy-mm-dd'),-5) then trunc(当前日期-add_month(出生日期,trunc(months_between(当前日期,出生日期)))

when substr(to_char(当前日期,'yyyy-mm-dd'),-5) = substr(to_char(出生日期,'yyyy-mm-dd'),-5) then 1 end 天数

我看了下你上面的两个例子,好像因为日期相等比较特殊,所以我尝试用ceil试试,如果不行那么就用下面这个,我估计差不多了,不过我可没有环境,只能是凭空想象,剩下的只能你自己去实验和修改了。

Oracle 根据出生日期计算年龄

肯定的,你的子查询写,要么是写多了,要么是写少了。

写多了,可以不用写子查询的

(select

(to_char(sysdate,'YYYY')-to_char(c.birthdate,

'YYYY'))

age

from

C

c)年龄,

改为

to_char(sysdate,'YYYY')-to_char(c.birthdate,

'YYYY')

年龄即可

写少了.(先确定id在c表中没有重复啊。)

from中去掉c

,然后在

(select

(to_char(sysdate,'YYYY')-to_char(c.birthdate,

'YYYY'))

age

from

C

c)年龄,

改为

(select

(to_char(sysdate,'YYYY')-to_char(c.birthdate,

'YYYY'))

age

from

C

c

where

c.id=a.id)年龄,

Oracle中如何计算年龄

SQL语句如下:

select floor(MONTHS_BETWEEN(sysdate,date'2016-1-1')/12) as age from dual;

结果:

oracle.根据生日字段计算查询出人员表每个人的年龄?

这个办法很多,如果是比较精确的可以用month_between函数,然后除以12,最后在trunc这样就能得到具体的年龄了。

比如trunc(month_between(sysdate,时间类型的生日字段)/12)

个人感觉这个精确一些,能精确到天,只要还没过生日,那么就不会加一岁。

当然二者直接相减trunc((sysdate-时间类型的生日字段)/365)也可以。

sysdate-时间类型的生日字段,这么相减默认出现的是相差的天数,所以除以365。这个也可以,不过有些年是366天,不过因为366天的年分比较少,所以基本上不会相差很多。只是会出现,“提前”的情况。不过80年最多才21天(大概是这样,我没细算,就算四年一次),所以对实际影响不是特别大。如果要求准确那么还是上面的靠谱一些。

用函数取出字段年,然后用现在的年相减也可以。这个就是一个大概(个人认为更加不靠谱),比如一个人2050年12月30日出生,现在是2055年后的1月1号,那么按照年来说就是5,但是其实才4岁多一点,所以年这个只是一个大概的,不会十分准确。

oracle根据出生日期算年龄

select floor(months_between(to_date(concat(extract(year from sysdate),'-10-31'),'YYYY-MM-DD'),to_date(生日的日期,'yyyy-mm-dd'))/12) from table_name

floor 向下取整

months_between 日期相差的月份数

concat字字符串连接

extract(year from sysdate) 返回当前日期的年份


本文名称:oracle年龄怎么计算 oracle 算年龄
分享路径:http://jkwzsj.com/article/hicgds.html

其他资讯