在Oracle / Toad中计算年龄 - 使用两列中的值

时间:2015-09-18 14:22:36

标签: oracle datediff toad floor to-date

我有两个Oracle列(在VIEW中,而不是表中) - DateOfBirth和MembershipDate。我正在尝试创建一个新列,该列将显示他们在成员资格之日的年龄。


示例列
DateOfBirth: 01/05/1975
MembershipDate: 01 / 09/2015
AgeWhenBecameMemb: 40

如何动态计算第三列?

我希望用以下方式实现它:

SELECT FLOOR(MONTHS_BETWEEN(DATE' 2012-01-01',DATE' 2010-10-10')/ 12)来自DUAL的ASWhenBecameMemb

谢谢!

3 个答案:

答案 0 :(得分:0)

哪个版本的Oracle?

在Oracle 11或更高版本中,您有虚拟列:请查看:https://asktom.oracle.com/pls/apex/f?p=100:11:::NO:RP:P11_QUESTION_ID:676611400346196844 ...

在此之前,您可以考虑视图或物化视图 - 具体取决于您的其他需求。

答案 1 :(得分:0)

使用TO_DATE()功能提供您自己的日期格式。例如:

select to_date('01/05/1975','dd/mm/yyyy') as DateOfBirth
     , to_date('01/09/2015','dd/mm/yyyy') as MembershipDate
     , FLOOR(MONTHS_BETWEEN(to_date('01/09/2015','dd/mm/yyyy'), to_date('01/05/1975','dd/mm/yyyy'))/12) AS AgeWhenBecameMemb
from dual;

针对您的具体数据:

select FLOOR(MONTHS_BETWEEN(to_date(MembershipDate,'dd/mm/yyyy'), to_date(DateOfBirth,'dd/mm/yyyy'))/12) AS AgeWhenBecameMemb
from dual;

此处描述了您尝试使用的语法(ANSI日期文字): http://docs.oracle.com/database/121/SQLRF/sql_elements003.htm#SQLRF51062

根据文件:

  

ANSI日期文字不包含时间部分,必须指定   格式为'YYYY-MM-DD'。或者,您可以指定Oracle日期值,如以下示例所示:
  TO_DATE('98 -DEC-25 17:30','YY-MON-DD HH24:MI')

答案 2 :(得分:0)

感谢大家的投入。在接受您的回复之后,我已经让这个专栏工作了,就像这样 -

(选择楼层(TO_CHAR(MembershipDate,' yyyy-mm-dd'),TO_CHAR(DateOfBirth,' yyyy-mm-dd'))/ 12)AS AGE_OF_CONSUMER来自双)AS AgeWhenBecameMemb

比较中使用的字段已经采用日期格式。

谢谢。