SQl函数分为单行函数和多行函数两类
单行函数
(1)单行函数语法: 函数名[(参数1,参数2,...)]
参数可以是变量,列名,以及表达式
(2)单行函数的特征:单行函数对单行操作,每行返回一个结果,有可能返回值与原参数数据类型不一致,单行函数可以卸载select,where,order by子句中,有些函数没有参数,有些函数包括一个或者多个参数,函数可以嵌套。
1,字符函数:主要指参数类型时字符型,不同函数返回值可能是字符型或数值型
(1)大小写转换函数:
lower(列名/表达式):将大写或者大小写混合的字符转换成小写
-
select empno,ename,deptno
-
from emp
-
where ename =
lower(
'BLAKE')
upper(列名/表达式):将小写或者大小写混合的字符转换成大写
initcap(列名/表达式):将每个单词的第一个字母转换成大写,其余的字母都转换成小写
(2)字符处理函数
instr(s1,s2,[n1],[n2]):返回s1中s2从n1开始,第n2次出现的位置,n1,n2的默认值为1
Lpad(s1,n1,s2):返回s1被s2从左面填充到n1长度后的字符串
rpad(s1,n1,s2):返回s1被s2从右面填充到n1长度后的字符
trim:去除字符串头部或者尾部的字符
replace(s1,s2,s3):把s1中的s2用s3替换
-
select ename,
concat(ename,job),
length(ename),
instr(ename,
'A')
-
from emp
-
where
substr(job,
1,
5) =
'SALES'
(3)数值函数
round:将列或者表达式所表示的数值四舍五入到小数点后的第n位
格式:round(45.926,2) 结果:45.93
trunc : 将列或者表达式所表示的数值截取到小数点后第n位
格式:trunc(45.926,2) 结果:45.92
mod:取m除以n后得到的余数
格式:mod(m,n)
mod(1600,300) 结果:100
-
select
round(
45.923,
2),
round(
45.923,
0),
round(
45.923,
-1)
-
from dual
结果分别为:45.92,46,50
dual是一张虚表,不能保存任何数据,只有一个字段,一行记录,利用sql引擎中的计算百搭师的能力帮我们运算时又不想在表中读取数据时就可以使用dual表。
例:计算job为SALESMAN的员工的月薪和奖金相处后的余数
-
select ename,sal,comm,
mod(sal,comm)
-
from emp
-
where job =
'SALESMAN'
2,日期的处理
Oracle是以一种内部的数值形式存储日期的,即:世纪,年,月,日,小时,分,秒,默认形式是:dd-mod-rr
(1)日期类型的数学运算
进行数字加减是在该日期上加减相对应的天数:'10-AUG-06'+15结果是‘25-AUG-06’
日期类型至今进行减操作,计算两个日期之间间隔了多少天:‘10-AUG-06’-‘4-AUG-06’结果四舍五 入后是6天
需要对一个日期进行加减相应小时操作,可以使用n/24来实现
-
select ename,(
sysdate-hiredate)/
7 weeks
-
from emp
-
where deptno =
10
(2)RR日期格式
RR日期格式:使用来判定按照dd-mod-rr格式给定的日期实际代表的日期是多少
(3)常用的日期函数
sysdate:返回当前系统日期
months_between:返回两个日期类型数据之间间隔的自然月数
add_months:返回指定日期加上相应的月数后的日期
next_day:返回某一日期的下一个指定日期
last_day : 返回指定日期当月最后一天的日期
round(date[,'fmt'])将date按照fmt指定格式进行四舍五入,fmt为可选项,如果没有指定的fmt,则默认为dd
格式码:世纪CC,年yy,月mm,日dd,小时hh24,分mi,秒ss
trunc对日期进行截断与round相同
extract:返回日期类型数据中的年份,月份或者日
-
select ename,sal,months_between(
sysdate-hiredate)
months
-
from emp
-
order
by
months
-
select sal,hiredate,add_months(hirdate,
3) new_date
-
from emp
-
where hiredate>
'01-1月-82'
3,转换函数
数据的转换分为显示类型转换和隐式类型转换
(1)显示类型转换
通常是在字符类型,日期类型,数值类型,主要有3个显示转换函数:to_char,to_number,to_date
to_char用于日期型,日期格式模型必须用单引号引起来并且大小写敏感
-
select ename,to_char(hiredate,
'mm/yy')
-
from emp
to_char用于数值型,使用以下形式可以把数值型数据转化成变长的字符串:
9 | 一位数字 |
0 | 显示前导零 |
$ | 显示美元符号 |
L | 显示本地货币符号 |
. | 显示小数点 |
, | 显示千位符 |
-
select to_char(sal,
'$99,99') salary
-
from emp
-
where ename =
'scott'
to_number将一个字符串转换成数值型数据
to_date将一个字符串转换成日期型数据
四,通用函数
通用函数,与空值(null)相关的一些函数,完成对空值(null)的一些操作,主要包括:
· nvl
· nvl2
· nullif
· coalesce
条件处理函数: case表达式,decode
(1)nvl2函数:nvl2(expr1,expr2,expr3),如果expr1不是null,返回expr2,否则返回expr3
(2)nullif函数:nullif(expr1,expr2),比较两个表达式,如果相等,返回null,否则返回第一个表达式
(3)coalesce函数:coalesce(表达式1,表达式2...表达式n),该函数是对nvl函数的扩展,返回第一个不为空的参数,参数个数不受限制
(4)case和decode函数实例
case:
-
select ename,deptno,
-
(
case deptno
-
when
10
then ‘销售部’
-
when
20
then ‘技术部’
-
when
30
then ‘管理部’
-
else ‘无’
end)
-
deptname
-
from emp
decode函数实例
-
select ename,deptno
-
decode(deptno,
-
10,‘销售部’
-
20,‘技术部’
-
30,‘管理部’
-
‘无’) deptname
-
from emp
函数的嵌套:单行函数可以嵌套于任何层,嵌套的函数是从最里层向最外层的顺序计算的
-
select ename,nvl(to_char(mgr),‘
no Manager’)
-
from emp
-
where mgr
is
null
SQl函数分为单行函数和多行函数两类
单行函数
(1)单行函数语法: 函数名[(参数1,参数2,...)]
参数可以是变量,列名,以及表达式
(2)单行函数的特征:单行函数对单行操作,每行返回一个结果,有可能返回值与原参数数据类型不一致,单行函数可以卸载select,where,order by子句中,有些函数没有参数,有些函数包括一个或者多个参数,函数可以嵌套。
1,字符函数:主要指参数类型时字符型,不同函数返回值可能是字符型或数值型
(1)大小写转换函数:
lower(列名/表达式):将大写或者大小写混合的字符转换成小写
-
select empno,ename,deptno
-
from emp
-
where ename =
lower(
'BLAKE')
upper(列名/表达式):将小写或者大小写混合的字符转换成大写
initcap(列名/表达式):将每个单词的第一个字母转换成大写,其余的字母都转换成小写
(2)字符处理函数
instr(s1,s2,[n1],[n2]):返回s1中s2从n1开始,第n2次出现的位置,n1,n2的默认值为1
Lpad(s1,n1,s2):返回s1被s2从左面填充到n1长度后的字符串
rpad(s1,n1,s2):返回s1被s2从右面填充到n1长度后的字符
trim:去除字符串头部或者尾部的字符
replace(s1,s2,s3):把s1中的s2用s3替换
-
select ename,
concat(ename,job),
length(ename),
instr(ename,
'A')
-
from emp
-
where
substr(job,
1,
5) =
'SALES'
(3)数值函数
round:将列或者表达式所表示的数值四舍五入到小数点后的第n位
格式:round(45.926,2) 结果:45.93
trunc : 将列或者表达式所表示的数值截取到小数点后第n位
格式:trunc(45.926,2) 结果:45.92
mod:取m除以n后得到的余数
格式:mod(m,n)
mod(1600,300) 结果:100
-
select
round(
45.923,
2),
round(
45.923,
0),
round(
45.923,
-1)
-
from dual
结果分别为:45.92,46,50
dual是一张虚表,不能保存任何数据,只有一个字段,一行记录,利用sql引擎中的计算百搭师的能力帮我们运算时又不想在表中读取数据时就可以使用dual表。
例:计算job为SALESMAN的员工的月薪和奖金相处后的余数
-
select ename,sal,comm,
mod(sal,comm)
-
from emp
-
where job =
'SALESMAN'
2,日期的处理
Oracle是以一种内部的数值形式存储日期的,即:世纪,年,月,日,小时,分,秒,默认形式是:dd-mod-rr
(1)日期类型的数学运算
进行数字加减是在该日期上加减相对应的天数:'10-AUG-06'+15结果是‘25-AUG-06’
日期类型至今进行减操作,计算两个日期之间间隔了多少天:‘10-AUG-06’-‘4-AUG-06’结果四舍五 入后是6天
需要对一个日期进行加减相应小时操作,可以使用n/24来实现
-
select ename,(
sysdate-hiredate)/
7 weeks
-
from emp
-
where deptno =
10
(2)RR日期格式
RR日期格式:使用来判定按照dd-mod-rr格式给定的日期实际代表的日期是多少
(3)常用的日期函数
sysdate:返回当前系统日期
months_between:返回两个日期类型数据之间间隔的自然月数
add_months:返回指定日期加上相应的月数后的日期
next_day:返回某一日期的下一个指定日期
last_day : 返回指定日期当月最后一天的日期
round(date[,'fmt'])将date按照fmt指定格式进行四舍五入,fmt为可选项,如果没有指定的fmt,则默认为dd
格式码:世纪CC,年yy,月mm,日dd,小时hh24,分mi,秒ss
trunc对日期进行截断与round相同
extract:返回日期类型数据中的年份,月份或者日
-
select ename,sal,months_between(
sysdate-hiredate)
months
-
from emp
-
order
by
months
-
select sal,hiredate,add_months(hirdate,
3) new_date
-
from emp
-
where hiredate>
'01-1月-82'
3,转换函数
数据的转换分为显示类型转换和隐式类型转换
(1)显示类型转换
通常是在字符类型,日期类型,数值类型,主要有3个显示转换函数:to_char,to_number,to_date
to_char用于日期型,日期格式模型必须用单引号引起来并且大小写敏感
-
select ename,to_char(hiredate,
'mm/yy')
-
from emp
to_char用于数值型,使用以下形式可以把数值型数据转化成变长的字符串:
9 | 一位数字 |
0 | 显示前导零 |
$ | 显示美元符号 |
L | 显示本地货币符号 |
. | 显示小数点 |
, | 显示千位符 |
-
select to_char(sal,
'$99,99') salary
-
from emp
-
where ename =
'scott'
to_number将一个字符串转换成数值型数据
to_date将一个字符串转换成日期型数据
四,通用函数
通用函数,与空值(null)相关的一些函数,完成对空值(null)的一些操作,主要包括:
· nvl
· nvl2
· nullif
· coalesce
条件处理函数: case表达式,decode
(1)nvl2函数:nvl2(expr1,expr2,expr3),如果expr1不是null,返回expr2,否则返回expr3
(2)nullif函数:nullif(expr1,expr2),比较两个表达式,如果相等,返回null,否则返回第一个表达式
(3)coalesce函数:coalesce(表达式1,表达式2...表达式n),该函数是对nvl函数的扩展,返回第一个不为空的参数,参数个数不受限制
(4)case和decode函数实例
case:
-
select ename,deptno,
-
(
case deptno
-
when
10
then ‘销售部’
-
when
20
then ‘技术部’
-
when
30
then ‘管理部’
-
else ‘无’
end)
-
deptname
-
from emp
decode函数实例
-
select ename,deptno
-
decode(deptno,
-
10,‘销售部’
-
20,‘技术部’
-
30,‘管理部’
-
‘无’) deptname
-
from emp
函数的嵌套:单行函数可以嵌套于任何层,嵌套的函数是从最里层向最外层的顺序计算的
-
select ename,nvl(to_char(mgr),‘
no Manager’)
-
from emp
-
where mgr
is
null