Oracle的知识点
开发工具与关键技术:Oracle、PLSQL Developer
作者:郑伟基
撰写时间:2019年3月27号
第四章:单行函数
1、 字符函数
大小写控制函数:Lower(全部变成小写)、Upper(全部变成大写)、Inttcar(首字母大写)
例:查询员工为King的信息。
select * from employees where lower(last_name) = ‘king’;
字符控制函数:Concat(连接字符串)、Substr(截取)、Length(取长度)、
Instr(选择字符串的第n个)、Lpad(左补齐)、Rpad(右补齐)、Trim(去头尾空格)、Replace(替换字符串)
select concat(concat('I ','Love ‘),‘You’) as 连接字符串,
substr(‘I Love SQL’,3,4) as 截取,length(‘I Love’) as 取长度,
instr(‘I Love’, ‘L’) as 选择字符串的第n个,lpad(‘123’, 10, ‘’) as 左补齐,
rpad(‘123’, 10, '’) as 右补齐,trim(’ Mike ') as 去头尾空格,
replace(‘I 123’, ‘123’, ‘456’) as 替换字符串 from dual;
输出结果:
2、 数字函数
1)Round:四舍五入,将数字四舍五入到小数点后n位,n默认是0
例:将45.5654用Round来保留两位小数。
select round(45.5654,2) from dual;
2)Trunc:将数字截取到小数点后n位,n默认是0
例:将685.4541截取1位小数。
Select trunc(685.4541, 1) From dual;
例:将685.4541截取到小数点前2位数。
Select trunc(685.4541, -2) From dual;
3)求余:计算m除以n后的余数
例:用10除4求余。
Select Mod(10,4) from dual;
4)abs(m) : 取绝对值
例:取-565的绝对值。
Select abs(-565) From dual;
3、日期函数
- Sysdate :返回当前系统(oracle服务器)时间
Select sysdate as 当前时间 from dual;
2)Months_Between:返回两个月相差的月数
例:计算出自己的年龄,四舍五入到小数点后1位
Select round(months_between(Sysdate, ‘2-4月-1990’)/12 , 1) as 年龄 from dual;
3)Add_Months:向指定的日期加上相应的月数
例:在当前的月份加上一个月。
Select add_months(Sysdate, 1) from dual;
4)Next_day:指定日期的下一个星期相对应的日期
例:计算出当前星期的下一个星期3。
Select next_day(Sysdate, ‘星期三’) from dual;
5)Last_day:本月的最后一天
例:计算出当前时间的最后一天。
Select last_day(Sysdate) from dual;
6)Round:日期的四舍五入
例:1~15日为上半个月,不管这个月有多少天都可以计算。
Select round(to_date(‘15-5-2019’, ‘DD-MM-YYYY’), ‘MM’) from dual;
7)Trunc:日期的截断
例:员工的工资按全月来发放。
select last_name,hire_date,trunc(hire_date,‘MM’) from employees;
4、类型转换函数
1)、 隐式的类型转换
Select * from employees Where department_id = ‘20’;
Select * from employees Where department_id = 20;
–‘DD-MON-YYYY’
Select * from employees Where hire_date = ’ 17-6月-1987’;
– oracle是可以进行隐式类型转换的
– 隐式类型转换是有规则的
– 不建议大家使用隐式类型转换
– 1. 代码可读性差;
– 2. 使用隐式类型转换,代码的效率差;
– 3. Oracle并没有承诺在下一个版本中不修改隐式类型转换的规则。
2、 显式的类型转换:to_char : 将日期或数字转换成字符
– 常用的日期格式
例:输出当前系统日期,如 2019/3/26 星期二
Select to_char(Sysdate, ‘YYYY/MM/DD DY’) from dual;
–常用的时间格式:
例:查出当前的系统时间,如 下午 05:12:10。
Select to_char(Sysdate, ‘AM HH12:MI:SS’) from dual;
例:输出当前的系统时间,如 2019年3月13日
Select to_char(Sysdate, ‘fmYYYY"年"MM"月"DD"日"’) as 当前系统时间 from dual;
注:
– Q :代表季度
– W: 当月的第几周
– WW:当年的第几周
– 代表数字的格式字符串
– 9 : 代表一位数字;
– 0 : 代表一位数字或前导零;
– $ : 代表美元符号;
– L : 根据语言区域动态的显示本地的货币符号;
– . : 小数点;
– , : 千位分隔符;
2)、to_date:对字符转换为时间格式
例:将2000-02-15用日期来表示
select to_date(‘2000-02-15’,‘yyyy-mm-dd’) from dual;
3)、to_number:对字符的转换
例:将¥1,234,555,999.00用to_number来表示。
select TO_NUMBER(‘¥1,234,555,999.00’,‘L999,999,999,999.99’) from dual;
5、通用函数
-
NVL函数:将空值转换成一个已知的值:
例:查询员工表中员工姓名,工资及一个季度的工资。
Select last_name, salary, (salary + nvl(commission_pct, 0)) * 3 from employees;
-
Nvl2:第一个值为空,返回第二个值;如第二给值为空,则返回第三个值,以此类推
例:查询员工表中员工姓名,工资及一个季度的工资。
select last_name,salary,nvl2 (commission_pct,salary + commission_pct , salary) * 3 from employees;
-
NULLIF:函数主要是完成两个参数的比较。当两个参数不相等时,返回值是第一个参数值;当两个参数相等时,返回值是空值
-
Coalesce: 参数的数量没有限制,返回第一个不为空 的参数
例:查询员工表中员工姓名,工资及一个季度的工资。
select last_name,salary,coalesce (salary + commission_pct,salary,0) * 3 from employees;
-
Case:作条件分支的判断,表达式(case…when…then…else…end…)
例:查询出员工表中的员工姓名,工资及部门编号以及部门名称
select last_name,salary,department_id,
(case department_id when 20 then ‘部门2’ else '部门’end) as 部门名称 from employees;
-
decode : case表达式的简便写法
– decode函数的参数也是不限数量的
6、嵌套函数
单行函数可以嵌套
嵌套的函数执行顺序是由内往外
例:查询各个部门中 最高工资中最低的那个部门的 最低工资是多少
select min(max(salary)) from employees group by department_id;