sql常用内置函数
--数学运算函数
select abs(-10) from dual; --去绝对值
select floor(1.1) from dual;--向下取整
select ceil(1.1) from dual;--向上取整
select ceil(-1.1) from dual;--向上取整
select round(1.5) from dual;--四舍五入
select sum(sal) from emp;--统计数字和
select sqrt(4) from dual; --开方
select trunc('1234.5678',3) from dual;--截取小数点后几位
select trunc('1234.5678',-3) from dual;--截取小数点前几位
select dbms_random.string('P',10) from dual;--产生随机字符
select round(dbms_random.value()*100) from dual;--产生随机数
--转换类函数
select sysdate from dual;
select to_char(sysdate,'yyyy-MM-dd') from dual;--转换日期
select to_char(sysdate,'day') from dual;--转换星期
select to_char(sysdate,'HH24:mi:ss') from dual;--转换时间
select to_char(sysdate,'"公元"yyyy"年"mm"月"dd"日"') from dual;--转换日期,用双引号引入中文,整个内容包含在一个单引号内
select to_char(1234.5678,'9999D99') from dual;--数字转换
select to_char(1234.5678,'000000D99') from dual;--数字转换,自动补0
select trim(to_char(1234.5678,'999999D99') ) from dual;--数字转换,自动补空格
select to_char('15','000') from dual;
select to_char('15','999') from dual;
select to_char('15','FM000') from dual; --去掉空格了
select to_char('15','FM999') from dual; --去掉空格了
--其他转换函数
select to_date('2019-08-15','yyyy-MM-dd') from dual;
select to_number('1001')+123 from dual;
--字符串函数
select instr('hello every','h') from dual;--有的话返回下标,没有的话返回0,从1开始
select trim(' a a a ') from dual;--去掉前后空格
select replace(' a a a ',' ','') from dual;--替换全部空格
select length('hello everyone') from dual;
select concat('hello','world') from dual;
select substr('hello everyone',2,2) from dual;--从2开始截取。截两个
--空值替换函数
select empno,ename,nvl(comm,'0.00') from emp;
select empno,ename,nvl2(comm,'有奖金','无奖金') from emp;
使用内置函数查询的练习
--1 找出不收取奖金或收取奖金低于100的雇员
select* from emp where empno not in (select empno from emp where comm>100);
select * from emp where comm is null or comm<100;
--2 显示正好为6个字符的雇员姓名
select ename from emp where length(ename)=6;
--3 显示不带有R的雇员的姓名
select ename from emp where ename not like '%R%';
--4 显示所有雇员的姓名的前三个字符
select substr(ename,1,3) from emp;
--5 显示所有雇员的姓名,用a替换所有A
select replace(ename,'a','A') from emp;
--6 显示在1981-7之后入职的所有雇员的姓名和加入公司的年份和月份
select ename,to_char(hiredate,'yyyy-MM') from emp
where to_number(to_char(hiredate,'yyyy'))>1980 and to_number(to_char(hiredate,'MM'))>7;
--7 列出按年薪排序的所有雇员的年薪
select ename,(sal+nvl(comm,'0.00'))*12 year_sal from emp order by year_sal desc;