Oracle(三)SQL函数--单行函数
SQL函数:单行函数、多行函数
单行函数:
仅对一行进行操作,每行只返回一个结果,
可转换数据类型,可嵌套,参数可以是一个列或一个值。
一、字符函数:
1.lower、upper、initcap
--lower 、upper 、initcap(单词首字母大写)
select * from emp e where lower(e.ename) = 'allen'
select upper('sql course') from dual
select initcap('sql course') from dual
concat、substr、length、instr、lpad、rpad、trim、replace
2.字符控制函数
select concat(empno, ename) from emp; --连接两列
select substr(ename, 1, 2) from emp; --选取后面两个数字区间的数据,不包括最后的数字
select length(ename) from emp;
select instr('SMITH', 'H') from emp; --查看字符在字符串中的位置
select lpad(e.sal, 10, '*') from emp e
select lpad(e.sal, 10, '*') from emp e where e.empno = 7788; --左补全
select rpad(e.sal, 10, '*') from emp e where e.empno = 7788; --右补全
select trim('H'from 'HHHelloHworldH') from dual; --只去前后的,中间的不去掉
二、数字函数:
round、trunc 、mod
--round(取小数的指定个数,后一位四舍五入)、trunc(取小数的指定个数,后一位不四舍五入)、mod求余
select round(49.9243, 2), round(49.923, 0), round(549.923, -2) from dual;
select trunc(49.9243, 2), trunc(49.923, 0), trunc(549.923, -2) from dual;
select mod(49.9243, 2), mod(49.923, 0), mod(549.923, -2) from dual;
三、日期函数:
1、sysdate返回系统时间
默认的日期格式是 DD-MON-RR.
两个日期相减可以得到相差的天数
EG:sysdate-e.hiredate
months_between 两个日期相差的月数
months_between(sysdate,hiredate)
add_months 向指定日期中加上若干月数
next_day 指定日期的下一个日期
last_day 本月的最后一天
round 日期四舍五入
trunc 日期截断
四、转换函数:
1.t.o_char():
必须包含在单引号中而且大小写敏感。
可以包含任意的有效的日期格式。
可以使用 fm 去掉多余的空格或者前导零。
与日期用逗号隔开。
2.to_number():
字符转换成数字
3.to_date():
字符转换成日期
RR日期格式:根据当前年份、指定年份的后两位
4.nvl():
可将空值转换成一个已知值
select e.ename, nvl(to_char(e.mgr), 'no manager') from emp e;
5.nvl2():
第二个参数是两个都不为空时显示的,第三个参数就是一个值为空时显示的
select e.ename, e.sal, e.comm, nvl2(e.comm, 'sal + comm', 'sal') income from emp e;
6.nvllif():
如果两个参数值相等,咋返回null,否则返回第一个参数值
7.coalesce():
如果第一个表达式非空,则返回这个表达式,对其他的参数进行COALESCE 。
五、条件表达式:
1、case where then else end
2、decode(针对的列名, '锁定的值', 执行的语句, 如果不符合则显示的值)
--分别用case和decode函数列出员工所在的部门,
select d.deptno,
CASE d.deptno WHEN 10 THEN '部门10'
WHEN 20 THEN '部门20'
WHEN 30 THEN '部门30'
WHEN 40 THEN '部门40'
ELSE '其他部门'END "所在部门"
from dept d;
select d.deptno,
decode(d.deptno, 10, '部门10', 20, '部门20',30, '部门30',40,'部门40','其他部门')"所在部门"
from dept d;