一、字符函数
1,字符串转换
-- lower() 将字符串转成小写
select lower(‘HELLO WORLD‘) from dual;
-- upper() 将字符串转大写
select upper(‘hello world‘) from dual;
-- initcap() 将字符串首字母大写
select initcap(‘hEllo woRld‘) from dual;
2,字符串截取
-- substr(a,b) 从a中,第b位开始取,取右边所有的字符
select substr(‘Hello World‘,4) from dual;
-- substr(a,b,c) 从a中,第b位开始取,取c位
select substr(‘Hello World‘,4,4) from dual;
-- lpad/rpad(a,n,b) 在a左/右填充b,直至长度为n
select lpad(‘Hello‘,8,‘*‘) ,rpad(‘Hello‘,8,‘*‘) from dual;
-- trim() 去掉前后指定的字符,也可以滤空操作
select trim(‘H‘ from ‘Hello WorldH‘) from dual;
select trim(‘ Hello WorldH ‘) from dual;
-- ltrim()/rtrim() 去掉左/右指定的字符,也可以滤空操作
-- replace() 替换指定位置的字符
select replace(‘Hello World‘,‘l‘,‘*‘) from dual;
3,字符串查询
-- instr() 在母串中查找子串,找到返回下标(从1开始),否则返回0
select instr(‘Hello World‘,‘ll‘) from dual;
-- length() 字符数, lengthb() 字节数
select length(‘Hello World‘), lengthb(‘Hello World‘) from dual
4,字符串拼接
-- 字段连接。使用||符号
select ‘aa‘ || ‘bb‘ from dual;
-- concat(a,b) 拼接a和b
select concat(‘a‘,‘b‘)||‘转23‘ demo from dual;
二、数字函数
-- round() 四舍五入,第一个参数为要进行四舍五入的数,第二个参数为保留的位数,大于0的为小数点后,小于0的为小数点前的
select round(12.345, 2),round(12.345, 1), round(12.345, 0),round(12.345, -1), round(12.345, -2) from dual;
-- trunc() 截断,第一个参数为要进行截断的数,第二个参数为保留的位数,大于0的为小数点后,小于0的为小数点前的
select trunc(12.345, 2),trunc(12.345, 1), trunc(12.345, 0), trunc(12.345, -1), trunc(12.345, -2) from dual;
-- mod() 取模操作
select mod(10,3) from dual;
三、日期函数
-- months_between(maxDate,minDate) 表示两个日期的月份之差
select months_between(sysdate,sysdate - 300) from dual;
-- add_months(date,n) 表示给指定的日期加n个月数
select add_months(sysdate,3) from dual;
-- next_day(date) 表示以当前时间为基准,下一个"目标日"的日期
select next_day(sysdate,‘星期二‘) from dual;
-- last_day(date) 计算当前日期所在月份的最后一天
select last_day(sysdate) from dual;
-- round(date,[param])对日期进行四舍五入,默认四舍五入到天
select round(sysdate,‘year‘) from dual;
-- trunc(date,[param])表示对日期进行截取
select trunc(sysdate) from dual;
四、转换函数
-- to_char(字符串/列,格式字符串) 将日期或者是数字变为字符串显示, 9 代表一位数字
select to_char(sysdate,‘yyyy-mm-dd‘),to_char(sysdate,‘yyyy‘) year, to_char(sysdate,‘mm‘) month, to_char(sysdate,‘dd‘) day from dual;
select to_char(sysdate,‘fmyyyy-mm-dd hh24:mi:ss‘) day from dual;
select to_char(10000,‘L999,999,999,999,999‘) from dual;
-- to_date(字符串,格式字符串) 将字符串变为date数据显示
select to_date(‘2016-3-18‘,‘yyyy-mm-dd‘) from dual;
-- to_number(字符串) 将字符串变为数字显示
select to_number(‘1‘) + to_number(‘2‘) from dual;
五、通用函数
-- nvl(a,b) 当a表达式为空(null,‘‘)时,返回b表达式
select nvl(‘‘,200) from dual;
-- nvl2(a,b,c) 如果a表达式的值不为空,显示表达式b的值,否则(为空)显示表达式c的值
select nvl2(‘‘,‘b‘,‘c‘) from dual;
-- nullif(a,b) 如果前后两个表达式的内容相等的,那就返回空,否则,返回第一个表达式的值
select nullif(5,5) from dual;
-- coalesce(a,b,c...) 用来匹配多个字段的值,如果表达式1的值为空,显示表达式2的值,如果表达式2也为空,显示表达式3的值,依次类推
select coalesce(‘‘,null,‘‘,‘a‘) from dual;
-- decode(被对比参数,对比参数1,返回值1,对比参数2,返回值2,....) 函数非常类似于程序中的if…else…语句
select decode(1,0,‘0-0‘,1,‘1-1‘,2,‘2-2‘) from dual;
六、case when 语句
--简单Case函数
CASE sex
WHEN ‘1‘ THEN ‘男‘
WHEN ‘2‘ THEN ‘女‘
ELSE ‘其他‘ END
--Case搜索函数
CASE
WHEN sex = ‘1‘ THEN ‘男‘
WHEN sex = ‘2‘ THEN ‘女‘
ELSE ‘其他‘ END
selct 中的用法
SELECT grade, COUNT (CASE WHEN sex = 1 THEN 1 /*sex 1为男生,2位女生*/
ELSE NULL
END) 男生数,
COUNT (CASE WHEN sex = 2 THEN 1
ELSE NULL
END) 女生数
FROM students GROUP BY grade;
where 中的用法
SELECT s.name
FROM student s
WHERE
(CASE
WHEN s.class = ‘001‘ THEN 1
WHEN s.class = ‘002‘ THEN 1
ELSE 0 END) = 1