oracle根據出生日期算年齡?最近我在使用Oracle時,碰到根據身份證号碼來獲取當前的年齡,用其他自帶函數拼接得出結果,不是很方便然後發現數據庫本身沒有這個函數,然後我自己嘗試寫了一個函數,就是關于獲取年齡的,僅供各位交流學習:,今天小編就來說說關于oracle根據出生日期算年齡?下面更多詳細答案一起來看看吧!
最近我在使用Oracle時,碰到根據身份證号碼來獲取當前的年齡,用其他自帶函數拼接得出結果,不是很方便。然後發現數據庫本身沒有這個函數,然後我自己嘗試寫了一個函數,就是關于獲取年齡的,僅供各位交流學習:
create or replace function FUNC_COMPARE_SFZHM( sfzhm in varchar2) --輸入身份證号碼
return number
/*
函數說明,返回值0為小于18歲;值為1是大于75歲;其他情況是返回值為2
在這個函數裡用到了trunc(months_between())
然後就是将身份證号碼裡的年月日組合成'yyyy-mm-dd'格式,但是在SQL裡拼接用的是"||",而不是" ",這個值得注意
*/
is
begin
if Trunc(MONTHS_BETWEEN(to_date(to_char(sysdate, 'yyyy-MM-dd'),'yyyy-MM-dd'),to_date(substr(sfzhm,7,4)||'-'||substr(sfzhm,11,2)||'-'||substr(sfzhm,13,2), 'yyyy-MM-dd')) / 12) < 18 then
return 0;
elsif Trunc(MONTHS_BETWEEN(to_date(to_char(sysdate, 'yyyy-MM-dd'),'yyyy-MM-dd'),to_date(substr(sfzhm,7,4)||'-'||substr(sfzhm,11,2)||'-'||substr(sfzhm,13,2), 'yyyy-MM-dd')) / 12) >75 then
return 1;
else
return 2;
end if;
end;
下面是函數調用的SQL語句:
select func_compare_sfzhm('31010320000314XXXX') from dual;//這個地方是舉個例子,所以後面四位我用X替代
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!