ORACLE常用函数功能演示

文档撰写:孟祥新

 

写在前面:

ORACLE内置函数,相当于C语言中的库函数,提供了常规数据库编程中所需的绝大多数基本功能,并且通过函数的组合或嵌套使用,可以发挥其强大的功能。由于这些内置函数都是由ORACLE公司的编程大家所写,而且其执行代码是内嵌在ORACLE数据库系统中的,因此其执行效率极高。

在数据库编程中能广泛使用ORACLE所提供的内置函数,将大大提高程序代码的执行效率。“站在高人的肩膀上,将使你变得更高”。

 

演示之前的环境设置:

为了在SQL*PLUS中直观地显示函数返回的结果,我将“头”信息先屏蔽掉。操作如下:

spacer.gif

 

 

一、单行函数

1.  数值函数

(1)       三角函数

     SINASINSINH(正弦、反正弦、双曲正弦)

     COSACOSCOSH(余弦、反余弦、双曲余弦)

     TANATANTANH(正切、反正切,双曲正切)

 

(2)       幂、方根及对数运算函数

     POWER(m, n)(取mn次幂)

     SQRT(n)(取n的平方根)

     EXP(n)(取自然对数底en次方根)

     LN(n)(取n的自然对数)

     LOG(m, n)(取以m为底n的对数)

以上函数功能演示如下:

spacer.gif

 

(3)       数值处理函数

     ABS(n)(取绝对值)

     SIGN(n)(符号函数)

     CEIL(n)(取不小于n的最小整数)

     FLOOR(n)(取不大于n的最大整数)

     ROUND(n, [m])(按m精度对n进行45入)

     TRUNC(n, [m])(按m精度对n进行截取)

     MOD(m, n)(取m除以n的余数)

 

以上函数功能演示如下:

spacer.gif

 

2.  字符处理函数

(1)       对字符串的大小写处理的函数

     INITCAP(功能:将字符串中每个单词的首字母,变换为大写。)

     UPPER(功能:将字符串中的所有字母,转换为大写。)

     LOWER(功能:将字符串中的所有字母,转换为小写。)

 

以上函数功能演示如下:

spacer.gif

 

(2)       对字符串进行处理的函数

     CONCAT(字符串连接函数,也可用 || 替代)

功能演示如下:

spacer.gif

 

     ASCII(取字符的编码)

     CHR(将编码转换为对应的字符)

以上函数功能演示如下:

spacer.gif

 

     LTRIM(去除左侧空格/指定字符)

     RTRIM(去除右侧空格/指定字符)

     TRIM(去除两侧的空格/去除指定字符)

 

以上函数去除空格功能演示如下:

spacer.gif

 

以上函数去除指定字符功能演示如下:

spacer.gif

请注意:在用TRIM去除字符串中指定字符(非空格)时的特殊用法。

 

     LPAD(左侧添充空格/指定字符)

     RPAD(右侧添充空格/指定字符)

以上函数功能演示如下:

spacer.gif

 

     LENGTH(取字符串的长度)

     SUBSTR(截取子字符串)

用法格式:SUBSTR(string, start [,length])

功能说明:从字符串stringstart位置开始向后截取length长度的子串

 

以上函数功能演示如下:

spacer.gif

 

     INSTR(查找子字符串的位置)

用法格式:INSTR(string, search_string [,n [,m]])

功能说明:从字符串string的第n个字符开始查找search_stringm次出现的位置,如果按条件没有找到字符串,则返回0

注意:此函数返回的位置是以原字符串首字符所在位置为起始点的,首字符位置为1

 

函数功能演示如下:

spacer.gif

 

     REPLACE(子串替换)

用法格式:REPLACE(string, search_string [,replace_string])

功能说明:将字符串string中的所有search_string都替换为replace_string,如果省略replace_string,则将字符串string中的所有search_string都去掉。

     TRANSLATE(字符转换)

用法格式:TRANSLATE(string, search_set, replace_set)

功能说明:将string中出现在search_set中的字符转换为replace_set相应位置的字符。

 

以上函数功能演示如下:

spacer.gif

 

3.  日期函数

     SYSDATE(取当前的数据库系统时间)

     ADD_MONTHS(加减指定的月份)

     MONTHS_BETWEEN(取两个日期之间相隔的月数)

     LAST_DAY(取指定日期所在月的最后一天)

 

以上函数功能演示如下:

spacer.gif

     ROUND(date, ‘format_string’)

       功能:按日期掩码format_string的格式对给定的日期date进行舍/入。

     TRUNC(date, ‘format_string’)

       功能:按日期掩码format_string的格式对给定的日期date进行截取。

 

以上函数功能演示如下:

spacer.gif

 

4.  类型转换函数

功能:在数值和字符,以及字符和日期之间进行数据类型的转换

说明:在ORACLE数据服务器,可以对数值形式的字符串隐式地转换为数值类型的数据,也可以将数值类型的数据隐式地转换为数值形式的字符串。但也可以进行如下的显式转换。

     TO_CHAR(n)(将数值n转换为字符类型)

     TO_NUMBER(‘string’)(将字符串string转换为数值类型)

知识扩展:常用进制的转换

spacer.gif

 

     TO_CHAR(date, ‘format_string’)(按照时间掩码format_string的格式要求,将日期型数据date转换为字符型数据)

     TO_DATE(‘string’, ‘format_string’)(将字符型数据string按照时间掩码format_string的格式要求,转换为相应的日期型数据)

 

常用的时间格式掩码如下:

掩码元素

含义

YYYY

四位数年份 (如:2005)

YY

二位数年份(如  05

Q

季度(1-4

MM

月份(01-12

WW

年的星期数(1-53),其中第一星期为年的第一天至第七天

W

月的星期数(1-5),其中第一星期为月的第一天至第七天

DDD

年的日(1-366

DD

月的日(1-31

D

周的日(1-7),其中周日为1,周六为7

HH24 

24小时制(0-23

MI

分钟(0-59

SS

秒(0-59

SSSSS

自午夜之后的秒(0-86399

 

以上函数功能演示如下:

spacer.gif

 

5.  空值转换函数

     NVL(expr1, expr2)

       功能:如果 expr1 的计算结果为 null 值,则返回 expr2 的值。如果 expr1 的计算结果不是 null 值,则返回 expr1 的值

     NVL2(expr1, expr2, expr3)

       功能:如果expr1非空,则返回expr2的值;如果expr1为空,则返回expr3的值。

     NULLIF(expr1, expr2)

       功能:比较两个表达式,如果相等返回空;如果不相等,返回第一个表达式的值。

     COALESCE(expr1, expr2, ..., exprn)

       功能:返回表达式列表中的第一个非空表达式的值。

 

6.  查看环境参数函数

(1)       USER函数             (返回当前用户名)

(2)       USERENV函数

         USERENV('ISDBA')                   (查看当前用户是否是DBA

         USERENV('LANGUAGE')          (查看环境所用的字符集)

         USERENV('TERMINAL')            (查看当前用户终端的标识)

以上函数用法演示如下:

select USERENV('ISDBA'), USERENV('LANGUAGE'), USERENV('TERMINAL') from dual;

(3)       SYS_CONTEXT函数

       说明:SYS_CONTEXT函数是在ORACLE 8i中新增的,在功能上比USERENV函数更加全面。

       用法格式:SYS_CONTEXT('USERENV', '<parameter>')

根据参数parameter来返回相应的信息

     登录验证类型

select SYS_CONTEXT('USERENV', 'AUTHENTICATION_TYPE') from dual;

     当前登录数据库的用户名

select SYS_CONTEXT('USERENV', 'CURRENT_USER') from dual;

     当前登录客户端的操作系统用户名

select SYS_CONTEXT('USERENV', 'OS_USER') from dual;

     当前所在客户机名(包括所在工作组名)

select SYS_CONTEXT('USERENV', 'HOST') from dual;

     当前所在客户机/终端名

select SYS_CONTEXT('USERENV', 'TERMINAL') from dual;

     当前所在客户端的IP

select SYS_CONTEXT('USERENV', 'IP_ADDRESS') from dual;

     当前是否为DBA帐户

select SYS_CONTEXT('USERENV', 'ISDBA') from dual;

     当前的字符集

select SYS_CONTEXT('USERENV', 'LANGUAGE') from dual;

     当前所使用的网络协议

select SYS_CONTEXT('USERENV', 'NETWORK_PROTOCOL') from dual;

     当前所使用的日历

select SYS_CONTEXT('USERENV', 'NLS_CALENDAR') from dual;

     当前的货币单位

select SYS_CONTEXT('USERENV', 'NLS_CURRENCY') from dual;

     当前的日期格式

select SYS_CONTEXT('USERENV', 'NLS_DATE_FORMAT') from dual;

     当前的日期语言

select SYS_CONTEXT('USERENV', 'NLS_DATE_LANGUAGE') from dual;

     当前所在的地域

select SYS_CONTEXT('USERENV', 'NLS_TERRITORY') from dual;

     当前代理用户

select SYS_CONTEXT('USERENV', 'PROXY_USER') from dual;

 

7.  DECODE函数

DECODE函数用法格式与说明:

格式:

DECODE(col|expression,

                          search1, result1

                          [, search2, result2 ]

                          [, search3, result3 ]

                          [, ......,  ......  ]

                          [, default]

         )

说明:

第一个参数可是是表的列,也可以是一个表达式。

如果第一参数的值与search1相等,则函数返回result1的值;

如果第一参数的值与search2相等,则函数返回result2的值;以此类推。

如果第一参数的值与所有的search都不相等,则函数返回default的值。

 

此函数用法示例如下:

spacer.gif

 

二、聚组函数

功能:对一组数据进行运算。

函数

功能描述

MAX

最大值

MIN

最小值

AVG

平均值

COUNT

数量值

SUM

总计值

以上函数功能演示如下:

spacer.gif

 

三、分析函数

分析函数简介:ORACLE8.1.6版开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚组函数的不同之处是对于每个组返回多行值,而聚组函数对于每个组只返回一行值。

ORACLE有一整套分析函数,功能极其强大,用法也非常灵活,关于这一块的功能演示,请待续……