oracle 内置函数

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;

posted @ 2019-08-15 18:04  Jotal  阅读(256)  评论(0编辑  收藏  举报