针对e信业务需求实现的sql--正则表达式使用的较多

 

SELECT replace(replace(regexp_replace(regexp_replace(emp_nm,'\\s+',''),',','、'),'?',''),'\\s+','') as emp_nm, --去除emp_nm的空格,问号以及将逗号转为顿号

grp_emp_unif_id,

 

   CASE WHEN mobl_num like '+86%' and length(mobl_num)='14' then mobl_num  --+86的手机号后面还有11位数字表示正常可用(目前未加数字的判断,只判断了长度且没有去除空格做判断-----此处是否还需要判断+86之后的第一位为1,以及全数字

   WHEN mobl_num  like '+852%' and length(mobl_num)='12' THEN mobl_num  --+852后面还需有8位数字表示正常可用(目前未加数字的判断,只判断了长度且没有去除空格做判断----此处是否还需要判断+852之后是否全数字

     when (substr(regexp_replace(mobl_num,'\\s+',''),0,1)='1' and length(regexp_replace(mobl_num,'\\s+',''))='11') and mobl_num not like '%-%'   --手机号1开头的,并且长度为11位的数字表示正常可用,并且11位中不能包含1-1-xxx形式的,该形式的是加拿大手机号。(该处判断的不够严谨,应该修改为1开头的,且长度为11位的只有数字

  then regexp_replace(mobl_num,'\\s+','')

     ELSE ''

   end mobl_num,

   

   CASE WHEN replace(emp_eml,'?','') like '%@%' THEN replace(replace(emp_eml,'?',''),'\\s+','')   ----邮箱格式为xx@xx即可,并去除问号(excel转csv的时候产生的)

   ELSE ''

    end emp_eml,

 

    CASE WHEN belg_grp_dept_id='' THEN belg_grp_org_id

    ELSE belg_grp_dept_id

    end belg_grp_dept_id,

 

    replace(regexp_replace(regexp_replace(curr_postn,',','、'),',','、'),'?','')  as curr_postn,   ---职级去除全角和半角的逗号以及问号

 

    CASE WHEN gender_cd='1' THEN '男'

    WHEN gender_cd='2' THEN '女'

    ELSE gender_cd

    end  gender_cd,   ---代码1为男,2为女,其它的未判断(此处应把其它的置为空,以免出现不正常的东西

 

    '' as is_leader,

 

    CASE WHEN ordr_num='' and

    (postn_lvl_cd='101' or postn_lvl_cd='102' or postn_lvl_cd='103' or postn_lvl_cd='201' or postn_lvl_cd='202' or postn_lvl_cd='203' or postn_lvl_cd='301' or postn_lvl_cd='302' or postn_lvl_cd='303')

    and

    (length(regexp_extract(in_corp_dt,'^\\d{4}\\d{2}\\d{2}$',0)) >1) then concat(postn_lvl_cd,in_corp_dt)  --在排序字段为空的前提下,需要先按照职级代码判断,101-303为正常的职级代码,然后入司时间时间的格式需要符合yyyymmdd格式才能连接组成一个排序字段

    ELSE ordr_num   --此处应该增加一个判断,需要判断这个字段都是数字才能用

    end ordr_num,

 

    '' as eng_name,

 

case WHEN (replace(replace(replace(replace(work_tel,'?',''),'(',''),')',''),'\\s+','') like '0%' or replace(replace(replace(replace(work_tel,'?',''),'(',''),')',''),'\\s+','') like '1%' )

and (replace(replace(replace(replace(work_tel,'?',''),'(',''),')',''),'\\s+','') regexp '[^0-9.\\-]'=0 )

    then  replace(replace(replace(replace(work_tel,'?',''),'(',''),')',''),'\\s+','')   --在0或者1开头的前提下,字段中只包含数字和-才可以作为正常使用的字段,把左右两边的括号以及excel转csv的时候产生的问号去掉了

    else ''

    end work_tel,

 

    '' as disadble,

    '' as passwd

from dh_dws.emp_base WHERE corp_cd !='0200000000'

and (duty_stat_cd ='1' or duty_stat_cd='7' or duty_stat_cd='8')   ---在职状态为1、7、8的时候才能被查询出来

;

你可能感兴趣的:(sql,问题分析总结,sql,hive,数仓)