oracle 如何分岁/月为单位计算年龄?
有oracle一张表表中有一出生日期字段为date类型是,现要建立一个如下视图oracle表如下id---(varchar2(10))date_of_birth---(d...
有oracle一张表表中有一出生日期字段为date 类型是,现要建立一个如下视图
oracle 表如下
id---(varchar2(10)) date_of_birth---(date)
05576767 1957-3-28
05563743 2013-3-27
05563744 2013-7-15
05563745 2013-6-7
05563741 2010-11-21
要用这个表生成一个这样的视图
id age unit
05576767 56.3 岁
05563743 3.6 月
05563744 1 天
05563745 1.3 月
05563741 2.8 岁
就是大于一岁的以岁为单位,小于1月的以天为单位,不满一岁的且大等于1月以月为单位 展开
oracle 表如下
id---(varchar2(10)) date_of_birth---(date)
05576767 1957-3-28
05563743 2013-3-27
05563744 2013-7-15
05563745 2013-6-7
05563741 2010-11-21
要用这个表生成一个这样的视图
id age unit
05576767 56.3 岁
05563743 3.6 月
05563744 1 天
05563745 1.3 月
05563741 2.8 岁
就是大于一岁的以岁为单位,小于1月的以天为单位,不满一岁的且大等于1月以月为单位 展开
1个回答
推荐于2016-05-25
展开全部
CREATE TABLE test (
id varchar2(10),
date_of_birth date
);
INSERT INTO test VALUES('05576767', TO_DATE('1957-3-28', 'YYYY-MM-DD'));
INSERT INTO test VALUES('05563743', TO_DATE('2013-3-27', 'YYYY-MM-DD'));
INSERT INTO test VALUES('05563744', TO_DATE('2013-7-15', 'YYYY-MM-DD'));
INSERT INTO test VALUES('05563745', TO_DATE('2013-6-7', 'YYYY-MM-DD'));
INSERT INTO test VALUES('05563741', TO_DATE('2010-11-21', 'YYYY-MM-DD'));
SELECT
id,
CASE WHEN MONTHS_BETWEEN(TRUNC(SYSDATE), date_of_birth) * 1.0 / 12 > 1 THEN ROUND(MONTHS_BETWEEN(TRUNC(SYSDATE), date_of_birth) * 1.0 / 12, 1)
WHEN MONTHS_BETWEEN(TRUNC(SYSDATE), date_of_birth) > 1 THEN ROUND(MONTHS_BETWEEN(TRUNC(SYSDATE), date_of_birth), 1)
ELSE TRUNC(sysdate) - date_of_birth
END AS age,
CASE WHEN MONTHS_BETWEEN(TRUNC(SYSDATE), date_of_birth) * 1.0 / 12 > 1 THEN '岁'
WHEN MONTHS_BETWEEN(TRUNC(SYSDATE), date_of_birth) > 1 THEN '月'
ELSE '天'
END AS Unit
FROM
test;
ID AGE UNIT
-------------------- ---------- ------
05576767 56.3 岁
05563743 3.6 月
05563744 1 天
05563745 1.3 月
05563741 2.7 岁
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询