已知条件 表名为table  出生日期字段 create_data
年龄字段为age
求大神帮助

解决方案 »

  1.   

    这个简单create_data-sysdate,就是出生的天数,想知道年,就/365。
    SELECT create_data 出生日期,(create_data-sysdate)/365 年龄 FROM 表名。
      

  2.   

    你这个表的设计显然不符合范式。因为你从出生年月就可以计算出年龄,这样你的age字段就依赖于reate_date,而且两者都是非主键,那么就违反了数据库的第三范式。
    这种情况下该表的数据就存在不一致的问题,年龄如果要考虑周岁的问题,难到你要每天将该表中所有行的age更新一次。特别是数据量特别大的情况下。
    在oracle11(好象是,记不清了)增加了虚拟列的概念和操作,年龄可以设置为虚拟列,虚拟列是根据非虚拟列通过公式计算出来的。是在创建表时设计的,但是虚拟列不能被update,在插入数据时不能插入数据。可以查询,这样可以简化程序设计人员设计。
      

  3.   

    非要这么做的话,看看between_month函数。floor函数update tablename set age=floor(between_month(sysdate-createdate)/12) where id=XXX;