oracle年齡計算函式

2021-09-14 01:34:51 字數 2838 閱讀 2976

根據出生日期與指定的計算時間(當前時間或者其他時間)計算準確的年齡,年月日分別以豎線分隔

create or replace function zljk_age_calc

( 出生日期_in date := null,

計算日期_in date := null

) return varchar2

as d_出生日期 date;

d_計算日期 date;

n_days number;

n_months number;

n_upperagelimit number; --引數:年齡上限

v_return varchar2(20); --由於病人資訊等相關表的年齡欄位為10個字元,所以最大允許10個字元或5個漢字

begin

--當天登記的病人不用重算年齡

d_出生日期:=出生日期_in;

d_計算日期:=計算日期_in;

--獲取兒童年齡的上限,請根據平台要求自行修改,三醫上報要求的兒童年齡為6歲

n_upperagelimit:=6;

n_months := trunc(months_between(d_計算日期, d_出生日期));

if n_months < 12 * n_upperagelimit then

--小於1歲的情況

if n_months < 12 then

--小於1月

if n_months < 1 then

n_days := trunc(d_計算日期 - d_出生日期);

--一天以內

if n_days = 0 then

n_days := trunc((d_計算日期 - d_出生日期) * 24 * 60);

if mod(n_days, 60) = 0 then

-- v_return := n_days / 60 || '小時';

v_return := '||'||to_char(round(n_days / 60/24,2),'fm999999990.9999999')

; else

-- v_return := floor(n_days / 60) || '小時' || mod(n_days, 60) || '分鐘';

v_return := '||'||to_char(round((floor(n_days / 60)/24+ mod(n_days, 60)/60/24),2),'fm999999990.9999999') ;

end if;

else

--一天至一月 精確到小時 :x天x小時

n_days := trunc((d_計算日期 - d_出生日期) * 24);

if mod(n_days, 24) = 0 then

-- v_return := n_days / 24 || '天';

v_return := '||'||to_char(round(n_days / 24,2),'fm999999990.9999999') ;

else

v_return := '||'||to_char(round((floor(n_days / 24) + mod(n_days, 24)/24),2),'fm999999990.9999999') ;

end if;

end if;

else

--大於1月

n_days := trunc(add_months(d_計算日期, -1 * n_months) - d_出生日期);

if n_days >= 31 then

--針對計算日期是2月份最後一天,出生日期剛好大於2月份最後一天且當天不是本月的最後一天

--如:計算日期:2016-02-29 出生日期:2015-01-30

n_months := n_months + 1;

n_days := n_days - 31;

end if;

if n_days = 0 then

---v_return := n_months || '月';

v_return := '|'||n_months ||'|';

else

v_return := '|'||n_months ||'|'|| n_days ;

end if;

end if;

else

--1歲到小於嬰兒年齡上限的情況

if mod(n_months, 12) = 0 then

--v_return := n_months / 12 || '歲';

v_return := n_months / 12 || '||';

else

--v_return := floor(n_months / 12) || '歲' || mod(n_months, 12) || '月';

v_return := floor(n_months / 12) || '|' || mod(n_months, 12) || '|';

end if;

end if;

else

--大於等於嬰兒年齡上限(直接x歲)

-- v_return := floor(n_months / 12) || '歲';

v_return := floor(n_months / 12) || '||';

end if;

return v_return;

exception

when others then

zl_errorcenter(sqlcode, sqlerrm);

end zljk_age_calc;

Jquery計算年齡

function countage birthday var curdate new date var oridate new date timestr var curyear parseint curdate.getfullyear 返回4位完整的年份 var oriyear parseint o...

mysql計算年齡

方法一,作者也說出了缺陷,就是當日期為未來日期時結果為0,而不是負數 這裡使用了5個函式和兩個運算子。方法二select date format now y date format birthday,y date format now 00 m d date format birthday,00 m...

sql 計算年齡

1.建立乙個計算年齡的函式 具體計算邏輯是,先年份相減,然後比較月份跟日期,如果當前月份日期小於出生的月份日期,則年齡 1 create function dbo fun getage agedate date,curdate date returns int begin return datedi...