`
rikugun
  • 浏览: 350321 次
  • 性别: Icon_minigender_1
  • 来自: 南宁
社区版块
存档分类
最新评论

神奇,吉祥号码查找

阅读更多
最近项目需要从号码里头找出一些特定格式的吉祥号码.
笔记一下. 本来函数是返回Boolean的,发现不能用在where 的条件,所以按照鬼佬的提示,改成返回 'Y','N'. where 条件是 where fliter_gsm_number('130000000','aaaa') ='Y'

在Oracle10g on AIX 测试通过

入参:
号码,吉祥号码格式,如 'AAA', '8AAA' ,'ABAB','AABB' ,'ABCD'
目前支持
  • 连号 如 00000,11111.
  • A数字A数字
  • A数字..A
  • 步步高升系列 ABCDE,EDCBA

欢迎补充 >.<


CREATE OR REPLACE FUNCTION fliter_gsm_number(gsm_number in varchar2,exp in varchar2) return varchar2 is
regexp varchar2(200);
i        number;
icount    number;
slen      number;
elen      number;
alpha     varchar2(100);
pgsm_number  varchar2(100);
begin
   --号码格式长度不能超过号码长度
   if length(exp) > length(gsm_number) then
   return 'N';
   end if;
   pgsm_number := gsm_number;
  --判断号码格式
  --连号 至少2位匹配 AA 或 BB 
  if regexp_like(exp,'^([[:digit:]]*)([[:alpha:]])\2+([[:digit:]]*)') then
     alpha := regexp_substr(exp,'([[:alpha:]])\1+');
     slen := instr(exp,alpha);
     elen := slen + length(alpha)-1 ;
     if slen> 1 then
      regexp := substr(exp,1,slen-1);
     end if;
     regexp := regexp||'([[:digit:]])\1{'|| to_char(elen-slen) ||'}'; --'([[:digit:]])(\1){1}'
     if elen<length(exp) then
      regexp := regexp||substr(exp,elen+1);
     end if;
  --ABBA,ABBBBBA
  elsif regexp_like(exp,'^([[:alpha:]])([[:alpha:]])\2+\1?') then
        alpha := regexp_substr(exp,'([[:alpha:]])\1+');
        regexp := '([[:digit:]])([[:digit:]])\2{'||to_char(length(alpha)-1)||'}';
        if substr(exp,-1,1) = substr(exp,1,1) then
        regexp := regexp||'(\1)';
        end if;  
  --ABAB  7777 也会匹配 有必要可以在输出时再判断一次
  elsif regexp_like(exp,'^([[:alpha:]][[:alpha:]])\1+') and substr(exp,1,1)<>substr(exp,2,1) then
     regexp := '([[:digit:]])([[:digit:]])(\1\2)' ;
     if length(exp) > 4 then
        regexp := regexp||'{'||(length(exp)/2-1)||'}';
      end if;   
  --A数字A数字...
  elsif regexp_like(exp,'^([[:alpha:]][[:digit:]])\1+') then
     regexp := '([[:digit:]])('||substr(exp,2,1)||')';
     if length(exp) > 2 then
        regexp := regexp||'(\1\2){'||(length(exp)/2-1)||'}';
     end if;
  --AABB 
  elsif regexp_like(exp,'^([[:alpha:]]{2})([[:alpha:]]{2})(\1\2)+') then
     regexp := '(([[:digit:]])\1([[:digit:]])\2)' ; 
     if length(exp) > 4 then
        regexp := regexp||'(\1\2){'||(length(exp)/2-1)||'}';
     end if;

  --A数字..A
  elsif regexp_like(exp,'^([[:alpha:]])([[:digit:]])+\1') then
     regexp := '([[:digit:]])'||substr(exp,2,length(exp)-2)||'\1';

  --步步高升系列 t
  -- ABC(DEF..) 至少以ABC开头
  elsif upper(substr(exp,1,3)) = 'ABC' then
      alpha := regexp_substr(exp,'[[:alpha:]]+');
      if length(gsm_number) <> length(alpha) and instr(gsm_number,regexp_substr(exp,'[[:digit:]]+$'),-1) <= 0 then
         return 'N';
      else 
         pgsm_number := regexp_substr(regexp_substr(exp,'^[[:digit:]]+') || gsm_number,'[[:digit:]]+');
      end if;
      icount := 1;
      --遍历号码
      for i in 1..length(pgsm_number) loop
       if icount = length(alpha)  then
           return 'Y';
       end if;
       if  to_number(substr(pgsm_number,i,1)) +1 =to_number(substr(pgsm_number,i+1,1)) then
       icount := icount +1;
       -- 如果不能连续符合条件即返回N
       else
          if icount >1 then
            return 'N';
          end if; 
       end if;
      end loop;
      return 'N';
  --(..ED)CBA 至少以CBA结尾
  elsif upper(substr(exp,-3)) = 'CBA' then
      alpha := regexp_substr(exp,'[[:alpha:]]+');
      if length(gsm_number) <> length(alpha) and instr(gsm_number,regexp_substr(exp,'^[[:digit:]]+')) <= 0 then
         return 'N';
      else 
         pgsm_number := regexp_substr(gsm_number,'[[:digit:]]+'||regexp_substr(exp,'^[[:digit:]]+'));  
      end if;
      icount := 1;
      --遍历号码
      for i in 1..length(pgsm_number) loop
       if icount = length(alpha) then
       return 'Y';
       end if;
       if  to_number(substr(pgsm_number,i,1)) -1 =to_number(substr(pgsm_number,i+1,1)) then
       icount := icount +1;
       -- 如果不能连续符合条件即返回N
        else
          if icount >1 then
            return 'N';
          end if; 
       end if;
      end loop;
      return 'N';
  
  -----------其他----------------
  else
      return 'N';
  end if;
--  dbms_output.put_line('reg:'||regexp);
  -- 是否匹配正则
  if regexp_like(gsm_number,regexp)
  then
     return 'Y';
  else
     return 'N';   
  end if;

end fliter_gsm_number;



测试
select fliter_gsm_number('13077127788','AABB') from dual; --Y
select fliter_gsm_number('13077127788','AA1') from dual; --Y

select * from table_numbers where fliter_gsm_number(gsm_number,'AABB') = 'Y';
0
0
分享到:
评论

相关推荐

    拍卖全球通吉祥号码.zip

    标题中的“拍卖全球通吉祥号码”暗示了这是一个与电信服务相关的活动,可能涉及到特定的电话号码,这些号码可能因为其特殊性(如连续数字、寓意好运的数字组合等)而被视为“吉祥”,并进行拍卖以获取更高的价值。...

    《吉祥物的设计》教学设计.pdf

    《吉祥物的设计》是一门融合了艺术、设计和文化背景的综合课程,旨在培养学生的创新思维和艺术表现力。这节课对于七年级学生而言,既符合他们活跃的思维和丰富的想象力,也是他们在设计领域的进一步探索。教学目标...

    车牌号码选号吉祥计算

    【车牌号码选号吉祥计算】是一种为汽车车主提供的车牌号码选择工具,旨在帮助车主根据个人喜好和特定条件筛选出满意的车牌号码。这个程序通常具备多种筛选功能,允许用户自定义过滤标准,例如避免某些数字组合或者...

    激光原理教材 阎吉祥

    根据提供的文件信息,我们可以推断出这是一本关于激光原理的专业教材,作者为阎吉祥,出版于2004年7月,由高等教育出版社发行。虽然“部分内容”中并未给出具体的信息,但我们可以基于该书的主题——激光原理,来...

    Discuz! 吉祥如意模板

    吉祥如意模板"是一款专为Discuz! 论坛系统设计的界面样式,它旨在提升用户在论坛交互过程中的视觉体验和使用感受。Discuz! 是一个非常流行的开源社区软件,用于搭建论坛、社交网络和门户站点。这款模板以其独特的...

    多媒体北京奥运吉祥物 下来菜单

    标题中的“多媒体北京奥运吉祥物 下来菜单”指的是一个与北京奥运会吉祥物相关的多媒体项目,可能包含动画、图像、音频和交互元素等,用于展示和介绍这些可爱的象征性角色。这个项目的重点是“下来菜单”,这可能是...

    CCNA吉祥三宝拓扑

    "CCNA吉祥三宝拓扑"是Cisco Certified Network Associate(CCNA)认证考试中的一个重要实践环节,主要在Cisco Packet Tracer模拟环境中进行。这个拓扑通常包括三个关键组件,它们可能是一个小型网络的基础,比如...

    阿里妈妈吉祥物CVI规范.pdf

    阿里妈妈的吉祥物CVI(Corporate Visual Identity,企业视觉识别)规范是品牌视觉形象的核心指导文档,旨在确保吉祥物在各种应用场景中保持一致性和品牌识别度。这份名为“阿里妈妈吉祥物CVI手册 V1.0”的文件详细...

    乘风破浪的动物们——互联网公司吉祥物设计探析.pdf

    互联网公司吉祥物设计探析知识点解析: 一、互联网公司使用动物形象作为吉祥物的原因分析: 1. 形象可爱、造型易记、寓意美好:互联网公司在设计吉祥物时倾向于选择动物形象,因为动物形象在人类认知中通常会被...

    中国古典元素吉祥图案ppt素材.rar

    标题中的“中国古典元素吉祥图案ppt素材.rar”表明这是一个压缩包文件,包含了用于制作PPT的素材,这些素材主要以中国古典元素为主题,且具有吉祥的寓意。在描述中,我们可以详细了解到这些素材的具体内容: 1. **...

    2010吉祥如意模板下载

    2010年发布的“吉祥如意”模板,显然旨在为用户带来好运和喜庆的视觉体验,适用于个人博客、企业官网或者节日主题的网站。这种模板通常包含了预设的颜色方案、布局结构、图片、字体样式以及交互元素等,使得设计师...

    吉祥马通用收信系统要的拿去

    【标题】:“吉祥马通用收信系统要的拿去” 【描述】:“吉祥马收信系统吉祥马通用收信系统吉祥马通用收信系统” 从标题和描述中我们可以推测,“吉祥马通用收信系统”是一个专门用于接收邮件的软件或服务,可能由...

    数字电子技术(高吉祥)课后答案4.pdf

    数字电子技术(高吉祥)课后答案4.pdf

    吉祥如意背景模板下载

    标题中的“吉祥如意背景模板下载”表明这是一组设计素材,通常用于制作具有中国传统吉祥寓意的网页或设计项目。在中文文化中,“吉祥如意”寓意好运、顺利,常用于节日、庆典或者商业宣传等场景。这类背景模板可能...

    吉祥抽奖软件 v3.6.5.zip

    吉祥抽奖软件是一款简单好用的抽奖软件。软件支持姓名抽奖、手机抽奖、数字抽奖、姓名 手机抽奖、姓名 部分抽奖等各种模式的抽奖形式,支持对奖品图片、字体、标题、字号等属性设置进行任意的修改,适用于年会抽奖、...

    汉城悉尼雅典奥运吉祥物经营案例分析.doc

    【标题】和【描述】提及的是对历届奥运会吉祥物的经营案例分析,特别是汉城、悉尼和雅典三届奥运会。这些案例涉及到吉祥物的商业价值、市场营销策略以及知识产权保护,这些都是体育赛事管理和品牌营销的重要组成部分...

    2011吉祥如意PPT模板下载

    标题“2011吉祥如意PPT模板下载”与描述“2011吉祥如意PPT模板下载”共同指向一个主题,即一个设计为2011年使用、具有吉祥如意主题的PowerPoint演示文稿模板。这个模板可能是为了各种场合,如新年庆祝、企业报告、...

    真实的世界V4.0 兔年吉祥版

    真实的世界V4.0 兔年吉祥版 真实的世界V4.0 兔年吉祥版 真实的世界V4.0 兔年吉祥版 真实的世界V4.0 兔年吉祥版

    Python绘制吉祥物源码

    Python绘制吉祥物源码,需要turtle模块

    吉祥邮-跨境电商产品设计原型.rp

    吉祥邮-跨境电商产品设计原型.rp,供参考和学习使用

Global site tag (gtag.js) - Google Analytics