您的位置:首页 > 数据库 > Oracle

oracle常见函数应用积累

2014-02-24 16:19 465 查看
LENGTH

--返回以字符为单位的长度.

LENGTHB

--返回以字节为单位的长度.

LENGTHC

--返回以Unicode完全字符为单位的长度.

LENGTH2

--返回以UCS2代码点为单位的长度.

LENGTH4

--返回以UCS4代码点为单位的长度.

--根据乡村组id获取所属卫生院

Select * From torganization a Where a.fparentorgid=(

Select

substr(t.forgseq,INSTR(t.forgseq,'.',1,4)+1,INSTR(t.forgseq,'.',1,5)-INSTR(t.forgseq,'.',1,4)-1)

From torganization t Where t.forgid=43337) And a.forgtypeid=3 And a.flevel=2 And a.stage=1 And Rownum=1;

--oracle截取与定位

--根据乡村组id获取所属卫生院

Select * From torganization a Where a.fparentorgid=(

Select

substr(t.forgseq,INSTR(t.forgseq,'.',1,4)+1,INSTR(t.forgseq,'.',1,5)-INSTR(t.forgseq,'.',1,4)-1)

From torganization t Where t.forgid=43337) And a.forgtypeid=3 And a.flevel=2 And a.stage=1 And Rownum=1;

--含非法字符的(不是数字和字母)

Select Regexp_replace(t.fidcard,'[^[:alnum:]]','') newfidcard,t.* From tjfpersoninfonext t Where regexp_like(t.fidcard,'[^[:alnum:]]');

--全角转半角

select TO_SINGLE_BYTE('oracle') from dual;

--oracle字符簇

字符簇:

[[:alpha:]] 任何字母。

[[:digit:]] 任何数字。

[[:alnum:]] 任何字母和数字。

[[:space:]] 任何白字符。

[[:upper:]] 任何大写字母。

[[:lower:]] 任何小写字母。

[[:punct:]] 任何标点符号。

[[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]。

--一次性更新身份证号(1.全角的更新为半角 2.中间有非法字符的过滤掉 3.第18位如果不是数字的改为X)

Select

substr(Case When length(aa.newfidcard1)<15 Then newfidcard1||Regexp_replace(aa.newfidcard2,'[^[:alnum:]]','')

When length(aa.newfidcard1)>14 Then newfidcard1||Regexp_replace(aa.newfidcard2,'[^[:alnum:]]','X') End,0,18) NEWIDCARD,

aa.* From (

Select

trim(Regexp_replace(substr(to_single_byte(t.fidcard),0,length(to_single_byte(t.fidcard))-1),'[^[:digit:]]','')) newfidcard1,

trim(substr(to_single_byte(t.fidcard),length(to_single_byte(t.fidcard)))) newfidcard2,

t.* From tjfpersoninfo t Where

(

regexp_like(substr(to_single_byte(t.fidcard),0,length(to_single_byte(t.fidcard))-1),'[^[:digit:]]') --除最后一位之外如果不是数字

Or --或者

regexp_like(substr(to_single_byte(t.fidcard),length(to_single_byte(t.fidcard))),'[^[:alnum:]]')--最后一位不是数字或者字母

)

/*And t.frcode='410782'*/) aa

--查找有效的日期但不在范围之内

--1.年度后两位小于14的,前两位都给改成20 2.年度小于1900的年度前两位改成19 按次序执行

Select to_char(t.fbrithday,'yyyy'),to_date('20'||substr(to_char(t.fbrithday,'yyyy'),3,2)||'-'||to_char(t.fbrithday,'MM-dd'),'yyyy-MM-dd') newbirthday,t.* From tjfpersoninfo t Where (t.fbrithday<to_date('1900-01-01','yyyy-MM-dd') Or t.fbrithday>Sysdate)

And substr(to_char(t.fbrithday,'yyyy'),3,2)<14;

Update tjfpersoninfo t Set t.fbrithday=to_date('20'||substr(to_char(t.fbrithday,'yyyy'),3,2)||'-'||to_char(t.fbrithday,'MM-dd'),'yyyy-MM-dd')

Where (t.fbrithday<to_date('1900-01-01','yyyy-MM-dd') Or t.fbrithday>Sysdate)

And substr(to_char(t.fbrithday,'yyyy'),3,2)<14;

Select to_char(t.fbrithday,'yyyy'),to_date('19'||substr(to_char(t.fbrithday,'yyyy'),3,2)||'-'||to_char(t.fbrithday,'MM-dd'),'yyyy-MM-dd') newbirthday,t.* From tjfpersoninfo t Where (t.fbrithday<to_date('1900-01-01','yyyy-MM-dd') Or t.fbrithday>Sysdate)

And to_char(t.fbrithday,'yyyy')<1900;

Update tjfpersoninfo t Set t.fbrithday=to_date('19'||substr(to_char(t.fbrithday,'yyyy'),3,2)||'-'||to_char(t.fbrithday,'MM-dd'),'yyyy-MM-dd')

Where (t.fbrithday<to_date('1900-01-01','yyyy-MM-dd') Or t.fbrithday>Sysdate)

And to_char(t.fbrithday,'yyyy')<1900;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: