单行函数

定义:只对一行进行变换,并产生结果

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;

你可能感兴趣的:(单行函数)