定义:只对一行进行变换,并产生结果
6种
一、字符函数
第一类:lower 、upper、 initcap--大小写控制函数
第二类:concat 、substr、length/lengthb、 instr、lpad | rpad 、trim 、replace
1、select lower('Hello World')转小写,upper ('Hello World')转大写,initcap('hello world')首字母大写 from dual;
2、select substr(a,b) 从a这个字符串中第b位开始取,取右边所有的字符 from dual;
select substr(a,b,c)从a这个字符串中第b位开始取,取c位 from dual;
3、length--字符数 lengthb--字节数
对于英文来说:字符数=字节数
对中文还说:2字符数=字节数
4、instr(a,b)--查找字符:在a中找b,返回值为b的位置
select instr('Hello World','ll')位置 from dual;
5、lpad 左填充 rpad 右填充 ---3个参数 例:abcd 变成10位
select lpad('abcd',10,'*')左,rpad('abcd',10,'*')右 from dual;---返回 ******abcd 和abcd******
6、trim --去掉前后指定的字符---区分大小写
select trim ('H' from 'Hello WorldH') from dual; 返回ello World
7、replace --替换
select replace ('Hello World','l','*') from dual; 返回He**o Wor*d
8、concat--连接两个字符,多个字符需要嵌套或用'||'
select concat('Hello','World') from dual;
二:数字函数
1、round:四舍五入 trunc:截断(只舍去) mod:求余
e.g. select round(45.926,2),round (45.926,1),round(45.926,0),round(45.926,-1),round(49.926,-2) from dual;
结果 45.93 45.9 46 50 0
select trunc(45.926,2),trunc (45.926,1),trunc(45.926,0),trunc(45.926,-1),trunc(49.926,-2) from dual;
结果 45.92 45.9 45 40 0
-------round函数和trunc函数不仅仅是数值函数,也是日期函数
三、日期函数
---------日期函数 months_between add_months next_day last_day round trunc
mysql: date 年月日 datetime 年月日小时分钟秒
select now();
oracle:date 年月日小时分钟秒---默认格式dd-mon-year
select sysdate from dual;
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
日期的数学运算
1日期加或减一个数字都是日期;数字的单位是天
2、两个日期相减返回日期之间相差的天数
3、可以用数字除24来向日期中加上或减去小时
select sysdate,sysdate-1,sysdate+1 from dual;
2、计算员工工龄:天 星期 月 年
select ename,hiredate,(sysdate-hiredate) 天,(sysdate-hiredate)/7 星期,(sysdate-hiredate)/30 月,(sysdate-hiredate)/365 年 from dual;
select ename,hiredate,(sysdate-hiredate)/30 月1,months_between(sysdate,hiredate)月2 from dual;----两个日期相差的月数
select add_months(sysdate,78) from dual;------向指定日期中加若干月
select last_day(sysdate) from dual;------时间所在月份的最后一天
select next_day (sysdate,'星期二') from dual;----指定日期的下一个日期 它的应用:每个周一自动备份表的 数据 第一、分布式数据库 第二、快照(不是很明白)
oracle中,备份和恢复数据库都是用RMAN(Recovery Manager)
(在rman target中登录 输入 back database;---备份数据库 输入 recovery database;---恢复数据库)
3、不允许日期加日期,没有意义
4、假设sysdate='25-jul-95'
round(sysdate,'month')------01-aug-95
round(sysdate,'year')-------01-jan-96
trunc(sysdate,'month')-----01-jul-95
trunc(sysdate,'month')-----01-jan-95
四:转换函数---意思:在不同的数据类型之间完成数值的转换,分为隐式转换和显式转换
隐式转换:由oracle自动完成
1、源码 varchar2 or char 转换成 number
2、源码 varchar2 or char 转换成 date
3、源码number 转换为 varchar2
4、源码date 转换为 varchar2
前提:被转换对象是可以转换的
显式数据类型转换
to_number /to_char/to_date/
e.g.select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss"今天是"day ') from dual;
-----查询员工薪水:两位小数 千位符 本地货币代码
e.g. select to_char(sal,'L9,999.99') from dual;
数字对字符串转换:to_char 、字符串对数字转换:to_number、
字符串对日期转换:to_date、日期对字符串转换:to_char
五、通用函数
这些函数
适用于任何数据类型,同时也适用于空值
nvl(expr1,expr2)//////nvl2(expr1,expr2,expr3)----当a=null时返回c,否则返回b
nullif(expr1,expr2)---当a=b,返回空值,否则返回a
coalesce(expr1,expr2,...,exprn)---从左往右找到第一个不为null的值
varchar2是varchar的增强,nvl2是nvl的增强
六:条件表达式
1、在Sql中使用if-then-else逻辑
2、使用两种方法:
case表达式:SQL99的语法,类似Basic,比较繁琐
Decode函数:Oracle自己的语法,类似java,比较简洁
select ename,job,salary涨前,case job when 'manage' then salary+800
when 'president' then salary+1000
else salary+600 end 涨后 from emp;
select ename,job,salary涨前,decode (job,'president',sal+1000,'manager',sal+800,sal+400) from emp;