函数:单行函数,多行函数 单行函数:字符函数,Number函数,日期函数,转换函数,系统函数
(oracle中所有字母都是以大写字母存储的)字符函数:转换函数,字符操纵函数 转换函数:lower('str') 将字符串中所有字母转换为小写 select lower(ename) from emp; upper('str') 将字符串中所有字母转换为大写 select * from emp where ename='king'; initcap('SStr aaa') 将字符串首字母转换为大写,其它都转换为小写(Sstr Aaa) 字符操纵函数: concat('str1','str2') 用于将两个字符串连接(str1str2) sumstr('str',1,3) 取子串函数(str) length('str') 取字符串长度(3) (注意:每个汉字的长度为1,等同一个字母) instr('str','t') 取某字符在某个字符串中首次出现的位置(2) lpad() 将字符串按某种模式显示 lpad(sal,10,'*') 结果:******5000 比如sal是5000它按10位输出,多出的位用'*'代替 (字符串函数中的字符串下标是从1开始的,而不是0)-------------------------Number函数: round 返回四舍五入值 round(45.926,2) 45.93 round(45.926,0) 46 round(45.926,-1) 50 trunc 截取小数 trunc(45.926,2) 45.92 trunc(45.926) 45 trunc(45.926,-1) 40 mod 求余运算 mod(1600,300) 100---------------------------日期型函数: 日期型函数格式:century,year,month,day,hours,minutes,seconds 默认日期格式:DD-MON-YY SYSDATE:返回当前数据库服务器的系统日期和时间 select sysdate from dual; (dual是系统的名义表,是为使用某些函数使用的表,oracle中不允许查询语句中 没有from关键字)
MONTHS_BETWEEN 返回两个日期之间月份的差值 MONTHS_BETWEEN('01-SEP-95','11-JAN-94') 19.6774194 select trunc(months_between(sysdate,'11-JAN-94')/12) from emp 求出表emp中的员工工作的年数 ADD_MONTHS 在日期上加上月份数 ADD_MONTHS('11-JAN-94',6) 11-JUL-94 NEXT_DAY 指定日期的后一天 ('01-SEP-95','FRIDAY') 得到的是下一个周五是几号 LAST_DAY 月份中最后一天 LAST_DAY('01-SEP-95') 30-SEP-95 ROUND 四舍五入日期 round('25_7_95','month')对月进行四舍五入 01-8-95 round('25_7_95','year')对年进行四舍五入 01-1-96 TRUNC 截断日期 trunc('25_7_95','month') 01-7-95 trunc('25_7_95','year') 01-1-95 ----------------------------------转换函数 数据类型转换:隐式数据类型转换(隐式转换函数可以不用转换函数,oracle可以自动转换),显示数据类型转换
oracle自动转换 字符型(数字的字符) 加 数字型 自动转换成数字类型 字符型 和 日期型 相互运算 时 自动转换成日期型 数值型 和 日期型 也可以自动转换成字符型
显示数据类型转换:number 转换为 character 用to_char character转换为 number 用to_number character转换为date用to_date date转换为character用to_char select ename,to_char(hiredate,'YYYY-MM-DD') from emp; 显示员工受雇日期,转换为字符输出
YYYY 代表完整的年份YEAR 年份MM 两位数月份MONTH 月份的完整名称DY 每星期中某天的三个字符缩写DAY 天的完整名称
select name, to_char(hiredate,'YYYY-MM-DD') from emp;显示员工表,员工的姓名,将员工的受雇日期转换成字符型显示(hiredate 员工的雇佣日期)
select to_char(sal) from emp;将员工工资转换成字符型select 'this is '||name||' '||to_char(sal) from emp;(加上连接运算符执行上面的操作)
insert into emp(no,name,hiredate) values(9005,'Tss','1990-11-1');这里的'1990-11-1'必须符合alter session set nls_date_format='YYYY-MM-DD'定义的日期模式
如果session中定义的日期模式和输入的不一样,可以用下面的日期转换函数去做insert into emp(no,name,hiredate) values(9006,'Ppss',to_date('1990-11-1','YYYY-MM-DD'));
-----------------------------------------------------------------------------------------------NVL: 将NULL值转换成一个实际的值(date,character,number型可以使用) null值任何数据运算时都得到一个null值,这里就可以用NVL
select name, sal, comm, (sal*12)+NVL(comm,0) as 年薪 from emp;comm为员工的提成工资,因为提成可能有,也可能没有,用NUL这个函数,如果没提成它的默认值为0
NVL(hiredate,'01-JAN-97') 如果雇佣日期为空,它的默认值为NVL(job,'no job yet') 如果工作职位为空,默认值为'no job yet'NVL(comm,0) 提成工资为空,默认值为0
-------------------------------------------------------------------------------------------Decode功能类似CASE or IF-THEN-ELSE语句DECODE(col/expression, search1,result1 [,search2,result2,...,] [default]) col/expression 值或表达式 search1 条件1 result1 结果1 default 没有符合条件时的默认值
select job,sal, DECODE(job, 'ANALYSY', sal*1.1, 'CLERK', sal*1.15, 'MANAGER', sal*1.20, sal) 实发工资 from emp; (如果job为'ANALYSY',工资为实际工资再加上10% 如果job为'CLERK',工资为实际工资再加上15% 如果job为'MANAGER',工资为实际工资再加上20% 如果job都不符合,工资就为默认值,实际工资sal )
-----------------------------------------------------------------函数嵌套单行函数可以多重嵌套select name NVL(to_char(mgr),'No Manager') from emp where mgr is null;(mgr是上司,如果没有上司,就返回'No Manager')
------------------------------------------------------------------Sql plus命令 save:将刚执行的sql语句,保存到文件中 save 'd:/empsql.txt'; clear screen 清屏 get:读取硬盘中的脚本文件,在plus Sql中显示其中的内容,并加载到缓存中,并没有执行,然后运行run才能执行 get 'd:/empsql.txt'; @ 'd:/empsql.txt'; 这条语句不仅是把脚本文件读出来,而且加到缓存中,并执行
connect system/oracle 连接到本机的system账号,密码是oracle connect system/oracle@xxx 最后的xxx是oracle的服务器 访问另一个用户的表(比如当前登入的用户是teacher) grant select on student 将当前数据库的select语句功能,授权给student 用student登入的另一个sqlPlus select * from teacher.emp student用户访问teacher用户的emp表 如果命令前几个写母和其它命令没有重复的,可以简写如:connect 可简写成conn,run-->r
exit: 可直接退出sql plus
sqlPlus 中选‘选项’--‘环境变量’ 里面有个autocommit默认是关,通过命令提交事务;如果选择开,每次的sql语句就都自动提交了。
