(3)Oracle尚硅谷:单行函数
单行函数:一条记录返回一个结果;(字符函数、数值函数、日期函数、转换函数、通用函数)
多行函数:多条记录返回一个结果;
1、字符函数
lower(字段或字符串)小写;
upper(字段或字符串)大写;
initcap(字段或字符串) 首字母大写;
concat('hello','world')——helloworld 连接;
substr('helloworld',3,4)—— llow 截取;
length('helloworld') ——10 求字符串长度;
instr('helloworld','o')——5 字符在字符串中首次出现位置;
lpad('helloworld',15,'*')——*****helloworld 不足位数左补齐;
rpad('helloworld',15,'*')——helloworld***** 不足位数右补齐;
trim('h' from 'hellohwohhrldhh')——ellohwohhrld 去除首尾;
replace('hellohwohhrldhh','h','s')——selloswossrldss' 取代所有;
2、数值函数
round(数值,小数位数) 四舍五入;
trunc(数值,小数位数) 截断;
mod(数值,除数) 求余;
--示例代码 select round(435.45,1),round(435.45),round(435.45,-1),trunc(435.45,1),mod(908,300) from dual;
--结果 ROUND(435.45,1) ROUND(435.45) ROUND(435.45,-1) TRUNC(435.45,1) MOD(908,300) --------------- ------------- ---------------- --------------- ------------ 435.5 435 440 435.4 8
3、日期函数
日期型数据包含:日期+时间
sysdate 当前日期时间;
months_between(日期1,日期2) 2个日期相差的月数;
add_months(日期,月数) 向指定日期加上若干月数;
next_day(日期,星期*) 指定日期的下一个星期*对应的日期;
last_day(日期) 本月的最后一天;
round( ) 四舍五入;
trunc( ) 截断;
yyyy 年 mm 月 dd 日
day 星期 hh 小时 mi 分钟 ss 秒
4、转换函数(隐性、显性)
隐性:date——varchar2——number 系统在运行语句时自动转换
显性:to_char to_date to_number
to_char中常用到的格式:
9:数字 0:零 ,:千分位 . :小数点 ¥:人民币符 $:美元符 L:本地货币符
‘999,999,999.999’ ‘L000,000,000.000’ ‘yyyy/mm/dd day hh/mi/ss’
--代码示例:
select to_char(123456.78,'$999,999,999.999')
from dual;
--123,456.780
--选择雇佣日期在1998-02-01到1998-05-01之间的员工姓名,job_id和雇佣时间
(日期格式需严格要求'1-5月-1998',因此常将日期转化为char格式)
select last_name,job_id,hire_date
from employees
where hire_date between '1-2月-1998' and '1-5月-1998';
或 where to_char(hire_date,'yyyy-mm-dd') between '1998-02-01' and '1998-05-01';
--选择在1994年雇佣的员工的姓名和雇佣时间
select last_name,hire_date
from employees
where to_char(hire_date,'yyyy')=1994;
5、通用函数
适用于任何数据类型,也适用于空值。
nvl(变量1,变量2) 将空值转换为一个已知的值;——当变量1为null时,返回变量2
nvl2(变量,变量1,变量2) 将空值转换为一个已知的值;—— 当变量不为null时,返回变量1;当为null时,返回变量2
nullif(变量1,变量2) 判断变量是否相等;—— 1=2返回null,不等返回1
6、在SQL中使用if—then—else逻辑(case、decode)
--代码示例:
--department_id 10 工资*1.1, 20 工资*1.2, 30 工资*1.3
case department_id when 10 then salary*1.1
when 20 then salary*1.2
when 30 then salary*1.3 end 别名;
当只有10,20,30时,最后可以 else salary*1.3;
decode (department_id,10,salary*1.1,
20,salary*1.2,
30,salary*1.3) 别名;