单行函数

2018-04-11  本文已影响0人  Mtllll

字符函数

SELECT 'helloworld Java',
LOWER('helloworld Java') ,
UPPER('helloWorld Java') ,
INITCAP('helloWorld Java') 
FROM dual                                                                                                                  
SELECT CONCAT('Hello', ' World!') FROM  dual
SELECT SUBSTR('abcdefgh',2,4) FROM dual
SELECT LENGTH('HelloWorld!'),INSTR('HelloWorld!','W') FROM dual
SELECT salary,LPAD(salary,10,'*'),RPAD(salary,10,'*') FROM emp
SELECT TRIM('H' FROM 'HelloHWorldHH') FROM dual
SELECT TRIM('  HelloHWorldHH   ') FROM dual
SELECT REPLACE('abcdabcdabcd','a','m') FROM dual

数值函数

SELECT ROUND(45.923,2),ROUND(45.923,0),ROUND(45.923,-1) FROM dual
SELECT TRUNC(45.923,2),TRUNC(45.923,0),TRUNC(45.923,-1) FROM dual

-mod 求余(模)

SELECT sal, MOD(sal,1000) AS Mod_Sal FROM emp

日期函数

image.png

转换函数

select TO_CAHR(SYSDATE,'yyyy-MM-dd hh:mm:dd day') from dual
SELECT TO_CHAR(sal, '$999,999.00') SALARY
FROM   emp
WHERE  ename = 'King';

SELECT TO_CHAR(sal, '$000,000.00') SALARY
FROM   emp
WHERE  ename = 'King'

通用函数

SELECT ename,sal,NVL2(comm, comm, 0) comm
FROM  emp
WHERE deptno IN (20, 30)
select nullif(50,50) from dual
select coalesce(null,comm,sal) from emp

条件表达式

select ename, deptno,
(case deptno
when 10 then '销售部'
when 20 then '技术部'
when 30 then '管理部'
else '无' end) deptname
from emp
select ename, deptno,
decode(deptno,
10, '销售部',
20, '技术部',
30, '管理部',
'无' ) deptname
from emp

练习1.1 写一个查询,用首字母大写,其他字母小写显示雇员的ename,显示名字的长度,并给每一列适当的标签,条件是满足所有雇员名字的开始字母是J、A或M的雇员,并对查询结果按雇员的ename升序排序。(用initcap、length、substr)

select initcap(ename) ename, length(ename) length from emp
where substr(ename,1,1) in ('J','A','M')
order by ename 

2.1 查询员工姓名中中包含大写或小写字母A的员工姓名。

select ename from emp where instr(upper(ename),'A')>0

2.2 查询部门编号为10或20,入职日期在81年5月1日之后,并且姓名中包含大写字母A的员工姓名,员工姓名长度(提示,要求使用INSTR函数,不能使用like进行判断)。

select ename, length(ename) from emp 
where deptno in (10,20) and hiredate>'1981-05-01' and instr(ename,'A')>0

2.3 查询每个职工的编号,姓名,工资要求将查询到的数据按照 要求将查询到的数据按照定的格式合并成一个字符串.
–前10位:编号,不足部分用填充,左对齐
–中间10位:姓名,不足部分用
填充,左对齐
–后10位:工资,不足部分用*填充,右对齐

select rpad(empno,10,'*')||rpad(ename,10,'*')||lpad(sal,10,'*') emp from emp 

3.1 写一个查询,分别计算100.456四舍五入到小数点后2位,1位,整数位的值。

select round(100.456,2), round(100.456, 1), round(100.456,0) from dual

3.2 写一个查询,分别计算100.456从小数点后2位,1位,整数位截断的值。

select trunc(100.456,2), trunc(100.456,1), trunc(100.456,0) from dual

4.1 查询每个员工截止到现在一共入职多少天?

select round(sysdate-hiredate,0) days from emp

5.1 查询服务器当前时间

select sysdate from dual

5.2 查询部门10 20 的员工截止到2000年1月1日,工作了多少个月,入职的月份。(提示:使用months_between,extract)

select round(months_between('2000-01-01', hiredate),0) work_months, extract(month from hiredate) hire_month
from emp 
where deptno in (10,20)

5.3 如果员工试用期6个月,查询职位不是MANAGER的员工姓名,入职日期,转正日期,入职日期后的第一个星期一,入职当月的最后一天日期。(提示:使用add_months,next_day,last_day)

select ename, hiredate, add_months(hiredate, 6), next_day(hiredate, 'Monday'), last_day(hiredate)
from emp 
where job<>'MANAGER'

6.4 把字符串2015-3月-18 13:13:13 转换成日期格式转换成日期格式,并计算
和系统当前时间间隔多少天。 (提示:使用to_date函数)

select  round(sysdate-to_date('2015-March-18 13:13:13','YYYY-MM-DD HH24:MI:SS')) from dual

课后作业1. 计算2000年1月1日到现在有多少月,多少周(四舍五入)。

select round(months_between(sysdate,'2000-01-01')) months,
round((sysdate-date'2000-01-01')/7) weeks
from dual
  1. 查询员工ENAME的第三个字母是A的员工的信息(使用2个函数)。
select * from emp where substr(ename,3,1)='A'
select * from emp where instr(ename,'A',3,1)=3
  1. 使用trim函数将字符串‘hello’、‘ Hello ’、‘bllb’、‘hello’分别处理得到下列字符串ello、Hello、ll、hello。
select trim('h'from'hello') from dual;
select initcap('hello') from dual;
select trim('b'from'bllb') from dual;
select lower('hello') from dual
  1. 将员工工资按如下格式显示:123,234.00 RMB 。
select to_char('12323400', '999,999,99')||'RMB' sal from dual
  1. 查询员工的姓名及其经理编号,要求对于没有经理的显示“No Manager”字符串。
select ename, nvl(to_char(mgr),'No Manager') from emp
  1. 将员工的参加工作日期按如下格式显示:月份/年份。
select to_char(hiredate, 'MON/YY') from emp
  1. 在员工表中查询出员工的工资,并计算应交税款:如果工资小于1000,税率为0,如果工资大于等于1000并小于2000,
    税率为10%,如果工资大于等于2000并小于3000,税率为15%,如果工资大于等于3000,税率为20%。
select ename, sal, (case 
when sal<1000 then 0
when sal>=1000 and sal<2000 then sal*0.1
when sal>=2000 and sal<3000 then sal*0.15
when sal>=3000 then sal*0.2
end) tax
from emp
  1. 创建一个查询显示所有雇员的 ename和 sal。格式化sal为 15 个字符长度,用 $ 左填充,列标签 SALARY。
select ename, lpad(sal,15,'$') salary from emp
上一篇下一篇

猜你喜欢

热点阅读