Oracle常见函数

目标

1.字符串操作    2.数值操作   3. 日期操作   4.null值操作

字符串操作

------------------1.1 char和varchar ------------------------------

  char :定长,达不到定长长度空格补齐;   浪费空间换取查询效率。

  varchar:变长,实际数据多少就多少。     节约空间但是比char查询效率低。

 

------------------1.2 字符串的字符编码----------------------------

     字符串存储长度都是按字节计算的。

 每一个英文在数据库中占一个字节。

 中文:GBK  2个     UTF-8:2-4个字节

 

-----------------1.3char和varchar最大存储长度--------------------

     char最大长度:2000个字节,也就2000个英文字母,gbk:1000个汉字

 varchar最大长度:4000个字节,也就4000个英文字母,gbk:2000个汉字

 char可以不指定长度,默认一个字节。

 varchar必须指定长度。

 

----------------1.4long和clob ------------------------------------

   long可以认为是varchar的加长版,存变长,最大2G。

      long的不足:(基本不用)

    每一张表只能出现一个long类型的

不能是主键

不能建立索引

不能出现在查询条件中

   clob存储可以是定长也可以是变长,最大4GB。一般用clob代替long

------------------------字符串的函数操作---------------------------

------------------1.5字符串拼接函数concat和||--------------------

   concat()用于字符串的拼接,但多个拼接比较繁琐,建议用字符串拼接符号||

 

1.6length()返回字符串的长度,varchar返回实际长度,char返回的是定长。

1.7将字符串中的字母进行转换(dual:虚表或伪表)

    upper():将字符串所有字母转大写。

    lower():将所有字符串转成小写。

    initcap():将所有的字符串单词的首字母转大写。

---------------------注意:函数中间是单引号,不能写双引号

------------------1.8trim()函数用于截取字符串---------------------

trim('e'from'elite')as t1 from dual;

ltrim()函数用于截取左边的字符串

select ltrim('elite','e')as t2 from dual;

rtrim()函数用于截取右边的字符串

select rtrim('elite','e')as t3 from dual;

将上面三个函数整合到一张表中,分别用别名显示在表中的字段

select trim('m'from'museum')as t1,ltrim('museum','m')as t2,rtrim('museum','m')as t3 from dual;

------------1.9补位函数 pad 有左补位lpad()和右补位r(pad);--------

SELECT rpad(ename,10,' ')as ename,lpad(sal,6,'$')as sal FROM emp;

------------------1.10截取字符串中字串函数substr()---------------

    将字符串从m位开始,截取n个字符串,注意字符串首位从1开始

m为0直接从字符串首位开始,m为负数从字符串尾部开始,n大于字符串长度,直接截取到字符串的尾部。

---------------1.11 instr()函数用来返回字符串中字串的位置。-------

 

 总结:字符串类型 char varchar2 long  clob

       字符串函数 连接concat()或|| 长度length() 转大小写upper(),lower(),iniecap()

             字符串截取函数 trim()^^^,补位函数lpad()、rpad(),

  截取字串位置的函数substr,截取字串的函数instr()。

   

Oracle数值操作

------------------------2.1数值类型:-----------------------------

     number(p):表示数值类型,p表示整数位也表示数值的总位数,取值的范围是1-38.----用来存id 年龄等数字

 number(p,s):p表示总位数(包括s),取值1-38,s表示小数后面的位数。---用来存金额。

               注意:如果指定是s,没有指定p,p默认就是38位

--------------------------------数值操作函数------------------------  

 2.2--round()对数值进行四十五入操作

查询语句建议全大写,这样的话效率会高一些。

SELECT ROUND(46.768,2) FROM DUAL;--46.77

SELECT ROUND(46.768,1) FROM DUAL;--46.8

SELECT ROUND(46.768,0) FROM DUAL;--47

SELECT ROUND(46.768,-1) FROM DUAL;--50

m必须是整数,默认的是0.可以是负数也可以正数,表示小数点后第几位

2.3TRUNC()函数用于截取数字(舍弃)

SELECT TRUNC(46.768,2) FROM DUAL; --46.76

SELECT TRUNC(46.768,1) FROM DUAL; --46.7

SELECT TRUNC(46.768) FROM DUAL; --46  不写相当于默认就是0

SELECT TRUNC(46.768,-2) FROM DUAL; --0

-----------------------2.4MOD()函数用于取模-----------------------

SELECT ENAME,SAL,MOD(SAL,1000) AS RESULT FROM EMP;--表示m取模于n后的结果

SELECT ENAME,SAL,MOD(SAL,0)AS RESULT FROM EMP;--如果n为0,直接返回m

-----------------2.5CEIL()/FLOOR()取天花板或地板函数--------------

SELECT CEIL(46.768)AS RESULT FROM DUAL;--47取比当前小数大的整数     转换大小写的快捷键ctrl+引号

SELECT FLOOR(46.768)AS RESULT FROM DUAL; --46取比当前小数小的整数

 

总结:数值类型 number(p)表示整数   number(p,s)表示小数

  四舍五入函数round()   截取数值函数:trunc()

  取模函数  mod()   取整函数  ceil()  floor()

Oracle日期操作

3.1日期类型  date内部7个字节   分别表示 世纪 年 月 日 时 分 秒

timestamp  时间戳 最大精度达到11个字节,前7位于date相同,8-11表示纳秒,4个字节存储

日期关键字:sysdate 用于获取系统时间,精确到时分秒,但是只显示年月日

可以将sysdate作为某一列的默认值也可以作为新值插入到表中

SYSTIMESTAMP也是Oracle的内部日期函数,返回当前系统日期和时间,精确到毫秒。

3.2日期转换函数

 日期转换函数

 字符串转为日期

查询2002以前入职的员工

TO_DATE()将给定的字符串以指定的格式进行转换

SELECT ENAME,HIREDATE FROM EMP WHERE HIREDATE

    日期转换为字符串

     to_char()是将日期按照指定的格式转换成字符串

将此时的系统时间转换为  Xxxx年xx月xx日 xx时xx分xx秒

SELECT TO_CHAR(SYSTIMESTAMP,'YYYY"年"mm"月"dd"日"hh24"点"mi"分"ss"秒"day')FROM DUAL;

3.3 日期常用函数

last_day();

返回当月的最后一天

SELECT LAST_DAY(SYSDATE) FROM DUAL;

指定返回15年2月份的最后一天是多少

SELECT LAST_DAY('01-2月-15')FROM DUAL;

add_monthS(DATE ,I)

I可以正数也可以是负数也可以是小数,小数位自动舍弃,正数往后,负数往前

查询员工入职后的20周年纪念日。

SELECT ENAME,ADD_MONTHS(HIREDATE,20*12)AS A FROM EMP;

计算3个月后的今天是哪一天,星期几?

SELECT TO_CHAR((ADD_MONTHS(SYSDATE,-10*12)),'YYYY-MM-DD DAY')FROM DUAL;

 

months_between()

返回两个日期之间间隔的月数,如果间隔的月之间不为整数就返回小数,第二个参数比第一个参数时间晚的话会返回一个负数     

select ename, months_between(hiredate,sysdate)hiredate from emp;

NEXT_DAY()

查询下个礼拜几是哪一天, 中间参数在中文环境可以写中文,英文环境下要写英文的星期几,

嫌麻烦的可以采用数字来1-7代替,注意1表示的星期天,7表示的星期六

下个礼拜三是哪一天

SELECT TO_CHAR((NEXT_DAY(SYSDATE,'星期三')),'YYYY-MM-DD DAY')AS NEXTWEEK FROM DUAL;

下个礼拜四是哪一天

SELECT TO_CHAR((NEXT_DAY(SYSDATE,5)),'YYYY-MM-DD DAY')AS NEXTWEEK FROM DUAL;--注意本周星期四还未过,所以显示本周的周四

比较函数

参数类型必须匹配,如果后面参数类型,不同于前面的参数的数据类型,会做自动转换,能转换就比较,不能转换就报错。但自动转换要注意符合前面参数的格式

比较后,哪个小返回哪个。

SELECT LEAST(SYSDATE,'09-9月-16')FROM DUAL;

 

EXTRACT():抽取或提取

从当前的系统时间中提取今年的数字

SELECT EXTRACT(YEAR FROM SYSDATE)AS YEAR FROM DUAL;

从指定的时间中获取hour

SELECT EXTRACT(HOUR FROM TIMESTAMP'2016-10-10 15:35:23)FROM DUAL;

空值操作

含义:表示未知或暂时不存在的  即null

4.1 向表中插入空值 ----不能违反非空约束

   显示插入:null

   隐式插入:不给值

4.2 更新空值

        注意:更新空值时,要加上条件限制,

    否则会将数据库表中该列中所有的字段值更新为null

     在更新为null值的时候,也不能违反非空约束

你可能感兴趣的:(数据库)