SQL语言是一种脚本语言,提供了大量的内置函数,使用这些函数可以大大增强SQL语句的运算和判断功能。
一、字符类函数
字符类函数是专门用于字符处理的函数,处理的对象可以是字符或字符串常量,也可以是字符类型的列,常用的字符类函数有以下几种:
1、ASCII(c)函数和 CHR(i)函数
ASCII(c) 函数用于返回一个字符的 ASCII码,其中参数 c 表示一个字符;
CHR(i) 函数用户返回给出 ASCII 码值所对应的字符,i 表示一个 ASCII 码值。
1 SQL > select ascii('Z') Z, ascii('H') H from dual;
2
3 Z H
4 --------------
5 90 72
1 SQL > select chr(90),chr(72) from dual;
2
3 C C
4 -----------------
5 Z H
说明:dual表是 Oracle 系统内部提供的一个用于实现临时数据计算的特殊表,也称名义表,它只有一个列 dummy,类型为varchar2(1).
2、Concat(s1,s2) 函数
该函数将字符串 s2 连接到字符串 s1 的后面,如果 s1 为 null,则返回 s2;如果 s2 为null,则返回 s1; 如果 s1 和 s2 都为空,则返回null。
SQL > select concat('hello ','World!') from dual;
concat
---------
hello World!
3、Initcap(s) 函数
该函数将字符串 s 的每个单词的第一个字母大写,其他字母小写,单词之间用空格、控制字符、标点符号来区分。
SQL > select initcap('hello world!') info from dual;
info
---------
Hello Wordl!
4、Instr(s1,s2 [,i] [,j]) 函数
该函数用户返回字符 s2 在字符 s1 中第 j 次出现的位置,搜索从字符串 s1 的第 i 个字符开始。当没有发现要查找的字符时,该函数返回值为 0 ;如果 i 为负数,那么搜索将从右到左进行,但函数的返回位置还是从左到右来计算。其中, s1 和 s2 均为字符串,i 和 j 均为正整数,默认值为1。
SQL > select instr('hello world123','l',2,3) info from dual;
info
---------
10
在字符串“hello world123” 中,从第2个字符开始查询字符串 ‘l’ 第3次出现的位置。
5、length(s) 函数
该函数用于返回字符串 s 的长度,如果 s 为null,则返回值 null。
SQL > select length('hello world') info from dual;
info
-------
11
6、Lower(s)函数和 Upper(s)
Lower 该函数用于返回字符串的小写形式;Upper 该函数用于返回字符串的大写形式。
SQL > select lower('HELLO') info1, upper('hello') into2 from dual;
info1 info2
-------------------
hello HELLO
7、Ltrim(s1,s2) 函数、Rtrim(s1,s2) 和 Trim(s1,s2) 函数
Ltrim 该函数用于删除字符串 s1 左边的字符串 s2;Rtrim 函数用于删除字符串 s1 右边的字符串 s2, Trim 函数用于删除字符串 s1 左右两端字符串 s2。
如果在这个3个函数中不知道字符串 s2 ,则表示去除相应方位的空格。
SQL > select ltrim('-----hello','-') info1,ltrim(' hello') info2 from dual;
info1 info2
------------------
hello hello
8、Replace(s1,s2[ ,s3]) 函数
该函数使用 s3 字符串替换出现 s1 字符串中的所有 s2 字符串,并返回替换后的新字符串,其中,s3 的默认值为空字符串。
SQL > select replace('good luck!','o','l') info from dual;
info
----------
glld luck
9、Substr(s,i,[ j ]) 函数
该函数表示从字符串 s 的第 i 个位置开始截取长度为 j 的子字符串。如果省略参数 j ,则直接截取到尾部,其中,i 和 j 为正整数。
SQL > select substr('hello',2,2) info1,substr('hello',2) info2 from dual;
info1 info2
------------------
el ello
二、数字类函数
数字类函数主要用于执行各种数据计算,所有的数字类函数都有数字参数并返回数字值。 Oracle 系统提供了大量的数字类函数,这些函数大大增强了 Oracle 系统的科学计算能力。
常用的数字类函数:
函数 | 说明 |
ABS(n) | 返回 n de 绝对值 |
Ceil(n) | 返回大于或等于数值 n 的最下整数 |
cos(n) | 返回 n 的余弦值,n 为弧度 |
exp(n) | 返回 e 的 n 次幂,e= 2.71828183 |
florr(n) | 返回小于或等于 n 的最大整数 |
log(n1,n2) | 返回以 n1 除以 n2 的对数 |
mod(n1,n2) | 返回 n1 除以 n2 的余数 |
power(n1,n2) | 返回 n1 的 n2 次方 |
round(n1,n2) |
返回舍如小数点右边 n2 位的 n1 的值,n2 的默认值为0,会返回小数点最接近的整数。 如果n2 为负数,就舍入到小数点左边相应的位上,n2 必须是整数 |
sign(n) | 若 n 为负数,则返回-1,若 n 为整数,则返回 1, 若 n = 0,则返回0 |
sin(n) | 返回 n的正弦值,n 为弧度 |
sqrt(n) | 返回 n的平方根 |
trunc(n1,n2) |
返回结尾到 n2 位小数的 n1的值,n2 默认设置为 0 , 当 n2 为默认设置时,会将 n1 截尾为整数,如果 n2 为负值,就截尾在小数点左边相应的位上 |
1、Ceil(n) 函数
该函数返回大于或等于数值 n 的最小整数,常用于一些比较运算。
SQL > select ceil(8.3) info1,ceil(-5.6) info2,ceil(8.6) info3 from dual;
info1 info2 info3
-----------------------
8 -5 9
2、Round(n1,n2) 函数
该函数返回舍入小数点右边 n2 位的 n1 的值,n2 的默认值为 0,这会返回小数点最接近的整数。如果 n2 为负数,就舍入到小数点左边相应的位上,n2 必须是整数。
SQL > select round(3.14159,2) info1, round(343.14159,-1) into2 from dual;
info1 info2
---------------------
3.14 340
3、Power(n1,n2) 函数
该函数返回 n1 的 n2 次方,其中 n1 和 n2 都为整数。
SQL > select power(2,4) info from dual;
info
-------
16
三、日期和时间类函数
Oracle 系统提供了许多用于处理日期和时间的函数,通过这下函数可以实现计算需要的特定的日期和时间,常用函数如下:
函 数 | 说 明 |
add_month(d,i) | 返回日期 d 驾驶 i 个月之后的结果,i 为任意整数 |
last_day(d) | 返回包含日期 d 月份的最后一天 |
months_between(d1,d2) |
返回 d1 和 d2 之间的数目,若 d1 和 d2 的日期都相同,或者都是该月的最后一天, 则返回一个整数,否则返回的结果将包含一个小数 |
new_time(d1,t1,t2) |
其中,d1 是一个日期数据类型,当时区 t1 中的日期和时间是 d1时,返回市区 t2 中的日期 和时间。t1 和 t2 是字符串。 |
sysdate() | 返回系统当前的日期 |
注意:日期默认的格式是 “DD-MON-YY”,其中 “DD” 表示两位数字的 “日”,MON 表示3位数的字的“月份”,“YY”表示两位数字的“年份”。例如:“01-10月-11”表示2011年10月1日。
1、sysdate()函数
该函数返回系统当前的日期。
SQL > select sysdate as 系统日期 from dual;
系统日期
-----------
30-5月-19
2、add_months(d,i) 函数
该函数返回日期 d 加上 i 个月之后的结果。其中,i 为任意整数。
SQL > select add_months(sysdate,6) info from dual;
info
-----------
30-11月-19
四、转换函数
在操作表中的数据时,经常需要将某个数据从一种类型转换为另外一种数据类型,这时需要转换类型函数。常用的转换函数如下:
函 数 | 说 明 |
chartorwida(s) | 该函数将字符串 s 转换为 rwid 数据类型 |
convert(s,aset [,bset]) | 该函数将字符串 s 由 bset 字符集转换为 aset 字符集 |
rowidtochar() | 该函数将 rowid 数据类型转换为 char 类型 |
to_char(x[,format]) | 该函数实现将表达式转换为字符串,format 表示字符串格式 |
to_date(s [,format[lan]]) | 该函数将字符串 s 转换成 date 类型,formate 表示字符串格式,lan 表示所使用的语言 |
to_number(s [,format[lan]]) |
该函数将返回字符串 s 代表的数字,返回值按照 format 格式进行显示,format 表示字符串 格式,lan 表示所使用的语言 |
1、to_char(x [,format]) 函数
该函数实现将表达式转换为字符串,format 表示字符串格式
SQL > select sysdate as 默认格式日期,to_char(sysdate,'YYYY-MM-DD') as 转换后日期 from dual;
默认格式日期 转换后日期
---------------------------------
30-5月-19 2019-05-30
2、to_number(s [,format[lan]]) 函数
该函数将返回字符串 s 代表的数字,返回值按照 format 格式进行显示, format 表示字符串格式,lan 表示所使用的语言。
SQL > select to_number('18','xxx') as 十进制数 from dual;
十进制数
-------------
24
五、聚合类函数
使用聚合类函数可以针对一组数据进行计算,并得到相应的结果。下面是常用的聚合函数:
函数 | 说明 |
avg(x[ distinct | all ]) | 计算选择列表项的平均值,列表项目可以是一个列或多个列的表达式 |
count(x[ distinct | all ]) | 返回查询结果中的记录数 |
max(x[ distinct | all ]) | 返回选择列表项目中的最大数,列表项目可以是一个列或多个列的表达式 |
min(x[ distinct | all ]) | 返回选择列表项目中的最小数,列表项目可以是一个列或多个列的表达式 |
sum(x[ distinct | all ]) | 返回选择列表项目中的数值总和,列表项目可以是一个列或多个列的表达式 |
variance(x[ distinct | all ]) | 返回选择列表项目中的统计方差,列表项目可以是一个列或多个列的表达式 |
stddev(x[ distinct | all ]) | 返回选择列表项目中的标准偏差,列表项目可以是一个列或多个列的表达式 |