我有两个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
谢谢!
答案 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
比较中使用的字段已经采用日期格式。
谢谢。