一.单行函数分类
单行函数主要分为5类:字符函数,数值函数,日期函数,转换函数,通用函数。
二.字符函数
字符函数又分为大小写控制函数和字符控制函数。
大小写控制函数: LOWER,UPPER,INITCAP
字符控制函数: CONCAT,SUBSTR,LENGTH/LENGTHB,INSTR,LPAD|RPAD,TRIM,REPLACE
LOWER:把大写字母全部转换为小写字母
select lower('SQL course') from dual;
注:dual是一个伪表可以用来测试函数和表达式。
运行结果:
UPPER:把所有小写字母转换为大写字母
select upper('SQL Course') from dual;
INITCAP:每个单词的首字母大写
select initcap('sql course') from dual;
CONCAT:把两个字符串连接
select concat('hello','world') from dual;
SUBSTR:截取某个范围内的字符串
select substr('hello world',1,5) from dual;
LENGTH:获取指定字符串的长度
select length('hello') from dual;
INSTR:获取字符在指定字符串中的位置
LPAD:获取指定长度的字符,如果长度不够,则在字符左边添加指定字符;RPAD反之,这里不做说明
select lpad('hello',10,'*') from dual;
select lpad('hello',5,'*') from dual;
select lpad('hello',4,'*') from dual;
TRIM:获取不包含指定字符的字符串
select trim('h' from 'helloWorld') from dual;
REPLACE:替换指定字符
select replace('abcd','bc','m') from dual;
三.数值函数
主要包括:ROUND,TRUNC,MOD
ROUND:四舍五入
select round(49.569,2) from dual;
TRUNC:截取
select trunc(49.569,2) from dual;
MOD:取余
select mod(100,3) from dual;
四.日期函数
特点:
1.在日期上加上或者减去一个数字结果仍为日期
2.两个日期相减返回日期的相隔天数
3.可以用数字除以24来加上或者减去小时数。
MONTHS_BETWEEN:两个日期相差月数
select months_between('01-8月-18','01-6月-18') from dual;
ADD_MONTHS:指定日期中加上若干月数
select sysdate from dual;
select add_months(sysdate,3) from dual;
NEXT_DAY:指定日期后一周内的日期
select next_day(sysdate,5) from dual;
LAST_DAY:本月的最后一天
select round(sysdate,'month') from dual;
ROUND:日期四舍五入
select round(sysdate,'month') from dual;
select round(sysdate,'year') from dual;
TRUNC:日期截取
sysdate=27-2月-18
select trunc(sysdate,'year') from dual;
select trunc(sysdate,'month') from dual;
EXTRACT:从指定时间中获取年月日
EXTRACT(year from date);
EXTRACT(month from date);
EXTRACT(day from date);
五.转换函数
TO_CHAR:把日期转化为指定格式
select to_char(sysdate,'YYYY"年"MM"月"DD"日"') from dual;
日期格式如下:
关于TO_CHAR有两种意义,另一种是把指定数字转化为指定格式
下面是TO_CHAR经常使用的数字格式:
select to_char(1000,'$99,999.00') from dual;
TO_NUMBER:将字符转换为数字
select to_number('1000') from dual;
TO_DATE:将字符转换为日期
select to_date('20180801','YYYY MM DD') from dual;
六.通用函数
适用于任何数据类型同时也适用于空值。
NVL(expr1,expr2):若expr1为空返回expr2,不为空则返回expr1
select id,nvl(name,'没名字') from test;
NVL2(expr1,expr2,expr3):若expr1不为空返回expr2,若为空返回expr3
select id,nvl2(name,'有名字','没有名字') from test;
NULLIF(expr1,expr3):相等返回null,不相等返回expr1,用法与NVL类似,此处不做说明
COALESCE(expr1,expr2,...,exprn):返回第一个非空表达式的值,如果所有表达式都是空值,最终返回第一个空值
if-then-else逻辑:
select 列名,...
case expr when 比较条件 then 结果
when 比较条件 then 结果
when 比较条件 then 结果
else expr end
也可以使用decode,如