第三节----单行函数

|-如下以employees表为例
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zmwG6wqf-1610448333127)(448bc261-e319-4238-9508-cb92d838d238)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EBUO4n7V-1610448333130)(d3eb2784-5c8f-487a-8a13-00a37a589932)]
在这里插入图片描述

①单行函数:

操作数据对象接受参数返回一个结果,只对一行进行变换,
每行返回一个结果,可以转换数据类型,可以嵌套,参数
可以是一列或一个值。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4x6WSA6f-1610448333132)(b1c10179-5fe2-47b1-9615-a45c07aaa883)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6aDTVVjl-1610448333137)(d204058d-a042-4924-8da4-9bcab8b8770b)]
在这里插入图片描述

②大小写控制函数

select lower('ATGUIGUJAVA'),UPPER('AtGuiGu Java'),initcap('AtGuiGu java') from dual;
select * from employees where lower(last_name) = 'king';
select * from employees where upper(last_name) = 'KING'

③字符控制函数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TCwZIos1-1610448333139)(d2c72ecd-569c-4fc8-8762-c4f460cf7ac2)]

select concat('hello','world'),substr('helloworld',2,4),length('helloworld')from dual;
select instr('hellowJava','l')from dual;
select employee_id,last_name,lpad(salary,10,'*')from employees;
select employee_id,last_name,lpad(salary,10,' '),rpad(salary,10,' ')from employees
select trim('h' from 'helloworld')from dual;--去除首尾
select replace('abcdab','b','m')from dual;

④数字函数

ROUND: 四舍五入
ROUND(45.926, 2)--------------->45.93

TRUNC:	 截断
TRUNC(45.926, 2)--------------->45.92

MOD: 求余
MOD(1600, 300)--------------->100
select round(435.45,2),round(435.45),round(435.45,-2)from dual;
select trunc(435.45,1),trunc(435.45),trunc(435.45,-1)from dual;
select mod(1100,300)from dual;

⑤日期

在日期上加上或减去一个数字结果仍为日期。

两个日期相减返回日期之间相差的天数。
日期不允许做加法运算,无意义

可以用数字除24来向日期中加上或减去天数
select sysdate,sysdate+1,sysdate-3 from dual;
--多少天
select employee_id,last_name,sysdate-hire_date workde_days from employees;
select employee_id,last_name,trunc(sysdate-hire_date) workde_days from employees;
--多少月
select employee_id,last_name,(sysdate-hire_date)/30 workde_months from employees;

⑥日期函数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nteJIlDa-1610448333141)(92c16880-7862-4cac-86b1-6efe712ca6b4)]

select employee_id,last_name,(sysdate-hire_date)/30,months_between(sysdate,hire_date) from employees;
select add_months(sysdate,2),add_months(sysdate,-3),next_day(sysdate,'星期四') from dual;
--hire_date是每个月倒数第二天有哪些
select last_name,hire_date from employees where  hire_date = last_day(hire_date)-1;
select last_day(sysdate) from dual;
select round(sysdate,'month'),round(sysdate,'mm'),trunc(sysdate,'hh') from dual;

⑦转换函数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f9m6QGnC-1610448333143)(d4ba6ace-636c-433c-9f4b-b1df2eaac434)]

Oracle 自动完成下列转换:
隐式转换:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cs8aGp2v-1610448333144)(ac76d849-c114-472b-899a-1d227e6638ed)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EkADamjO-1610448333145)(6a8ccc05-eeaa-42de-8e14-f45fcd669349)]
在这里插入图片描述

select '12'+2 from dual;
select sysdate + '2' from dual;

显式转换:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Pr5zpWVm-1610448333147)(85a8f5a1-a2c9-4856-aab2-0139544d2d81)]

日期转换:

select employee_id,hire_date from employees where to_char(hire_date,'yyyy-mm-dd')= '1994-06-07';
select employee_id,hire_date from employees where to_date('1994-06-07','yyyy-mm-dd') = hire_date;

select to_char(1234567.89,'999,999,999.99') from dual;
select to_char(1234567.89,'000,000,999.99') from dual;
select to_char(1234567.89,'L000,000,999.99') from dual;
select to_number('¥001,234,567.89','L000,000,999.99') from dual;
select to_number('$001,234,567.89','$000,000,999.99') from dual;

⑧通用函数

这些函数适用于任何数据类型,同时也适用于空值:
NVL (expr1, expr2)
NVL2 (expr1, expr2, expr3)
NULLIF (expr1, expr2)
COALESCE (expr1, expr2, ..., exprn)
--年薪
select employee_id,last_name,salary*12*(1+nvl(commission_pct,0))"annual sal" from employees;

--输出last_name,department_id,当department_id为null时,显示‘没有部门’
select last_name,nvl(to_char(department_id,'999999'),'没有部门') from employees;
select last_name,nvl(to_char(department_id),'没有部门') from employees;

--查询员工的奖金率,若为空,返回0.01,若不为空,返回实际奖金率+0.015
select last_name,commission_pct,nvl2(commission_pct,commission_pct+0.015,0.01) from employees;

⑨条件表达式
–CASE 表达式:

--查询部门号为 10, 20, 30 的员工信息, 若部门号为 10, 则打印其工资的 1.1 倍, 20 号部门, 则打印其工资的 1.2 倍, 30 号部门打印其工资的 1.3 倍数
select employee_id,last_name,department_id,case department_id when 10 then salary * 1.1 when 20 then salary * 1.2 else salary * 1.3 end new_sal from employees where department_id in(10,20,30);

–DECODE 函数:

select employee_id,last_name,department_id,decode(department_id,10,salary*1.1,20,salary*1.2,salary)new_sal from employees where department_id in(10,20,30);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值