根據出生日期與指定的計算時間(當前時間或者其他時間)計算準確的年齡,年月日分別以豎線分隔
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...