oracle自定义函数积累

2 篇文章 0 订阅
1 篇文章 0 订阅
1、判断是否为数字
create or replace function IS_NUMBER(string VARCHAR2) return integer is
  begin
   if(LENGTH(TRIM(TRANSLATE(string, ' +-.0123456789', ' '))) is null ) then
      return 1;
   else
      return 0;
   end if;
  end IS_NUMBER;


2、判断是否为日期
CREATE OR REPLACE FUNCTION is_date(parmin VARCHAR2) RETURN NUMBER IS
  val DATE;
BEGIN
  val := TO_DATE(NVL(parmin, 'a'), 'yyyy-mm-dd hh24:mi:ss');
  RETURN 1;
EXCEPTION
  WHEN OTHERS THEN
    RETURN 0;
END;


3、判断是否为身份证号码
create or replace function IS_IDCard
(p_IDcard varchar2)
return boolean
is
IDcardlen integer default 0;
begin
  IDcardlen:=Length(p_IDcard);
  if (IDcardlen = 18 and IS_NUMBER(SubStr(p_IDcard, 1, IDcardlen-1))=1
                     and IS_DATE(substr(p_IDcard,7,8))=1)
                    or
     (IDcardlen = 15 and IS_NUMBER(SubStr(p_IDcard, 1, IDcardlen))=1
                     and IS_DATE ('19' || subsTR(p_IDcard,7,6))=1)
  then
      return TRUE;
  ELSE
      return FALSE;
  end if;
end IS_IDCard;




4、从身份证号中获取年龄
create or replace function get_age
(workerid in varchar2)
return varchar2
is
agevalue varchar2(10);
begin
  if(length(trim(workerid))=18) then
     select (to_char(sysdate,'yyyy')-to_char(substr(workerid,7,4))) into agevalue from dual;
  else if (length(trim(workerid))=15) then
    select (to_char(sysdate,'yyyy')-to_char('19'||substr(workerid,7,2))) into agevalue from dual;
  else
    agevalue:='0';
  end if;
  end if;
  return agevalue;
end;


5、从身份证号码中获取性别
create or replace function get_Sex(p_IDCard varchar2)
return varchar2
is
IDCardLen integer;
begin
  IDCardLen:=length(p_IDCard);
  if IS_IDCARD(p_IDCard)=false then
    return null;
  end if;
  if IDCardLen=18 and substr(p_IDCard,17,1) in (1,3,5,7,9) then
    return ('男');
  end if;
  if IDCardLen=18 and substr(p_IDCard,17,1) in (2,4,6,8,0) then
    return ('女');
  end if;
   if IDCardLen=15 and substr(p_IDCard,15,1) in (1,3,5,7,9) then
    return ('男');
  end if;
  if IDCardLen=15 and substr(p_IDCard,15,1) in (2,4,6,8,0) then
    return ('女');
  end if;

end get_Sex;


不断更新中……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值