SQL小练之查询和更改

SQL中的查询与更改

基于上一篇的文章中的数据,接下来讲一些数据查询与更改的问题

1.找出姓名倒数第三位是A且不属于20号部门的员工信息
SQL server:
SELECT * FROM EMP WHERE ename lIKE '%A__' AND deptno != 20;
这里用到了通配符进行模糊查询,like 这个关键字就是用于字符串模糊查询的
%A_ _中,用下划线占位符,A _ _则标识字符A处于倒数第三个位置。
Oracle:
select * from emp where instr(ename,'A',length(ename)-2,1)=length(ename)-2
在此处使用instr(A,B,I,J)函数,其中A是源字符串,B是目标字符串,I是起始位置,J是匹配序号(第i个匹配的)。它只检索一次,返回值是要截取的字符串在源字符串中的位置。

2.将emp的入职日期当中月份两位数字统一替换成两个
Oracle:
select replace(to_char(hiredate,'yyyy-mm-dd'),substr(to_char(hiredate,'yyyy-mm-dd'),5,4),'-**-') from emp
使用replace(A,B,C)函数,A表示字符串,B表示被替换的字符串,C表示替换的字符串,
也就是,这个函数把字符串A里面所包含的所有的B字符串用C替换掉,然后返回替换后的新字符串。

3.将会员信息表的姓名字段只保留姓氏,其余内容全部替换成一个*,返回修改后的结果
Oracle:select replace(username,substr(username,2,length(username)-1),'*') from t_user_info
与上题类似

4将员工姓名中的A, B, C字母统一替换为Z,返回修改后的姓名
SQLserver:
update emp set ename = REPLACE(ename,'A','Z'); update emp set ename = REPLACE(ename,'B','Z'); update emp set ename = REPLACE(ename,'C','Z');
Oracle:
select translate(ename,'ABC','ZZZ') from emp
TRANSLATE(string,from_str,to_str),返回将(所有出现的)from_str中的每个字符替换为to_str中的相应字符以后的string。TRANSLATE 是 REPLACE 所提供的功能的一个超集。如果 from_str 比 to_str 长,那么在 from_str 中而不在 to_str 中的额外字符将从 string 中被删除,因为它们没有相应的替换字符。to_str 不能为空。Oracle 将空字符串解释为 NULL,并且如果TRANSLATE 中的任何参数为NULL,那么结果也是 NULL。

5.emp 将工资精确到百位,返回修改后的工资
select round(sal,-2) from emp
round(m,n),n若为正数,则表示将m精确到小数点后n位。反之,精确到小数点前n位。

6.将工资截取至千位,返回修改后的工资
Oracle:
select trunc(sal,-3) from emp
只舍不入。
7. emp 查询工资为整百的员工,返回员工姓名
select salary,username from emp where mod(salary,100)=0
*8.查询员工年薪([工资+提成]12),返回员工姓名和年薪
Oracle:
select ename,(sal+nvl(comm,0))*12, sal, comm from emp
nvl函数格式是nvl( string1, replace_with)。它的功能是如果string1为NULL,则NVL函数返回replace_with的值,否则返回string1的值,如果两个参数都为NULL ,则返回NULL。
9. 查询员工入职十年后的日期,截取到当天零点。

Oracle:
select trunc(add_months(hiredate,120), 'hh24') from emp; select trunc(sysdate, 'd') from dual;
trunc函数的另一个用法,截取时间。

猜你喜欢

转载自blog.csdn.net/Marko_Liu/article/details/89155954
今日推荐