取当前日期的年份,再取出生日期的年份,两者相减就是年龄。不知道你用的什么数据库啊?
不知道你什么数据库啊
如果是 Oracle
SELECT
AVG ( (sysdate - 出生日期) /卜迅 365 )
FROM
表
如果是 SQL Server
SELECT
AVG ( DATEDIFF(yy, 出手档生日型薯此期, GETDATE()) )
FROM
表
给你提供一个计算日期的算法,我写了一个函数。调用函数就可以了。select AVG(Fun_Getage(出生日期,to_char(sysdate,'yyyymmdd'),'0')) FROM 表 where 查询条件....
下面是函数的具体代码
CREATE OR REPLACE FUNCTION Fun_Getage(p_Birthday IN VARCHAR2, --格式 yyyymmdd
p_Presentday IN VARCHAR2, --格式 yyyymmdd
p_Caltype IN VARCHAR2) RETURN NUMBER IS
-- p_Birthday 出生日期
-- p_Presentday 截告档止日:为空时默认为系统时间
-- p_Caltype 计算方式:'0'--截止到日; '1'--截止到月; '2'--年初; 3'--虚岁
Lv_Enddate VARCHAR2(8); -- 截止日
Lv_Caltype VARCHAR2(3); -- 计算方式数字型
Ln_Birthyear NUMBER(4); -- 生日年
Ln_Birthmonth NUMBER(2); -- 生日月
Ln_Birthday NUMBER(2); -- 生日日
Ln_Endyear NUMBER(4); -- 截止年
Ln_Endmonth NUMBER(2); -- 截止月
Ln_Endday NUMBER(2); -- 截止日
Ln_Age NUMBER(6); -- 年龄
BEGIN
-- 出生日期空参数处理
-- 出生日期yyyymmdd
IF p_Birthday IS NULL THEN
--生日为空返回-1
RETURN - 1;
END IF;
-- 计算类型为空,则默认截止到日
Lv_Caltype := NULL;
IF p_Caltype IS NULL THEN
Lv_Caltype := '0';
ELSE
Lv_Caltype := p_Caltype;
END IF;
-- 截止日期yyyymmdd
IF p_Presentday IS NULL THEN
Lv_Enddate := To_Char(SYSDATE, 'yyyymmdd');
ELSIF Length(p_Presentday) = '4' THEN
Lv_Enddate := p_Presentday || '0101'迅答;
ELSIF Length(p_Presentday) = '6' THEN
Lv_Enddate := p_Presentday || '01';
ELSIF Length(p_Presentday) = '8' THEN
Lv_Enddate := p_Presentday;
ELSE
Lv_Enddate := To_Char(SYSDATE, 'yyyymmdd');
END IF;
Ln_Birthyear := To_Number(Substr(p_Birthday, 1, 4)); -- 生日年
Ln_Birthmonth := To_Number(Substr(p_Birthday, 5, 2)); -- 生日月
Ln_Birthday := To_Number(Substr(p_Birthday, 7, 2)); -- 生日日
Ln_Endyear := To_Number(Substr(Lv_Enddate, 1, 4)); -- 截止年
Ln_Endmonth := To_Number(Substr(Lv_Enddate, 5, 2)); -- 截止月
Ln_Endday := To_Number(Substr(Lv_Enddate, 7, 2)); -- 截止日
-- 计算到截止日期
IF Lv_Caltype = '0'袜昌乱 THEN
IF Ln_Endday < Ln_Birthday THEN
Ln_Endmonth := Ln_Endmonth - 1;
END IF;
IF Ln_Endmonth < Ln_Birthmonth THEN
Ln_Endyear := Ln_Endyear - 1;
END IF;
END IF;
-- 计算到截止月份
IF Lv_Caltype = '1' THEN
IF Ln_Endmonth < Ln_Birthmonth THEN
Ln_Endyear := Ln_Endyear - 1;
END IF;
END IF;
-- 计算到截止年度
-- 计算年龄
Ln_Age := Ln_Endyear - Ln_Birthyear;
IF Lv_Caltype = '3' THEN
Ln_Age := Ln_Age + 1;
END IF;
RETURN Ln_Age;
END Fun_Getage;