数据库实验五 函数

任务描述

本关任务:对表达式取整

相关知识

四舍五入的函数 ROUND(X,D) 返回X,其值保留到小数点后D位,而第D位的保留方式为四舍五入。 若D的值为0,则对小数部分四舍五入。 若将D设为负值,保留X值小数点左边的D位

TRUNCATE(X,D) 返回被舍去至小数点后D位的数字X。 若D的值为0,则不带有小数部分。 将D设为负数,则截X小数点左起第D位开始后面所有低位的值

任务要求

工作人员gzry数据表如图所示

数据库实验五 函数_第1张图片

第一题 显示雇员姓名gyxm和扣费kf(工资gz的0.5%),要求四舍五入到个位。 第二题 显示雇员姓名gyxm和扣费kf(工资的0.5%),要求舍去小数部分(不是四舍五入)


开始你的任务吧,祝你成功!

use sale;
#代码开始
#第一题答案
select gyxm,round(gz*0.05,0) as kf from gzry;
#第二题答案
select gyxm,truncate(gz*0.05,0) as kf from gzry;
#代码结束

 

任务描述

本关任务:工作人员gzry数据表如图所示,使用字符串函数完成下列查询

数据库实验五 函数_第2张图片

相关知识

为了完成本关任务,你需要掌握: concat rpad char_length left

concat

concat(<字符串1>,<字符串2>,<字符串3>) 将各个字符串连接起来

rpad

rpad(<字符串>,<长度>,<填充字符>) 返回字符串,右面用填充字符填补,直到指定长度的字符串

left

LEFT(<字符串>,<长度>) 返回字符串的最左边的指定长度的字符

char_length

char_length(<字符串>) 返回字符串的长度,即字符个数

任务要求

第一题 查询员工信息(命名为ygxx),使用字符串函数连接部门(不足4位宽度的部分右边填充全角空格)、姓名(不足4位宽度的部分右边填充全角空格)、电话,按部门升序排列。

数据库实验五 函数_第3张图片

第二题 查询gzry数据表中姓王且名字为双字的员工的姓名和电话 (即王某某)


开始你的任务吧,祝你成功!

use sale
 #代码开始
 #答案一
select concat(rpad(bm,4," "),rpad(gyxm,4," "),dh) as ygxx from gzry order by bm;

 #答案二
 select gyxm,dh from gzry where left(gyxm,1)="王" and char_length(gyxm)=3;
 
 #代码结束

任务描述

本关任务:灵活应用字符串函数显示顾客gk数据表的数据

数据库实验五 函数_第4张图片

相关知识

为了完成本关任务,你需要掌握: insert space mid right replace

insert

insert(<字符串>,<位置>,<长度>,<插入的字符串>) 返回一个字符串,将字符串中指定位置的指定长度的字符删除,插入指定的字符串。

space

space(<整数>) 返回指定整数的空格

mid

mid(<字符串>,<指定位置>,<指定长度>) 返回字符串从指定位置开始的指定长度的字符串

right

right(<字符串>,<指定长度>) 返回字符串右边的指定长度的字符串

replace

REPLACE(<字符串>,<源字符串>,<目标字符串>) 返回一个字符串,将字符串中所有的源字符串用目标字符串代替。

任务要求

顾客数据表gk如图所示

数据库实验五 函数_第5张图片

第一问 显示每位顾客的姓名,两个字的中间插入两个空格,三个字的直接显示,列名为xm 第二问 显示每位顾客的姓名和电话(dh),电话按照999-9999-9999的格式显示 第三问 将顾客数据表中单位(dept)中的新一佳用佳惠替换


开始你的任务吧,祝你成功!

use sale;
#代码开始
#答案1
SELECT INSERT(name, 2, 0, SPACE(2 * (3 - CHAR_LENGTH(name)))) AS xm FROM gk;

#答案2
select name,concat(left(tel,3),"-",mid(tel,4,4),"-",right(tel,4)) as dh from gk;
#答案3
update gk  set dept=replace(dept,"新一佳","佳惠");
select name,dept from gk;
 #代码结束

任务描述

本关任务:灵活应用日期函数进行查询

相关知识

为了完成本关任务,你需要掌握: year month datediff

year

year(日期) 返回日期的年号

month

month(日期) 返回日期的月号

datediff

datediff(日期1,日期2) 返回两个日期相差的天数

任务要求

xsd数据表部分数据如图所示

数据库实验五 函数_第6张图片

第一问 查询2015年各月份(列名yf)的实际付款的和(列名sjje) 提示:按照xsrq的月份对sjfk汇总 第二问 library数据库的borrow数据表如图所示 book数据表的条形码、书名、售价字段如图所示 根据图书馆规定,借阅期限是30天,超过30天需要按书籍售价的1%每天收取罚款. 查询dzzh和罚款(fk列) (提示:该查询涉及到两个数据表borrow和book)


开始你的任务吧,祝你成功!

 use sale;
#代码开始
#答案1
select month(xsrq) as yf,sum(sjfk) as sjje from xsd  where year(xsrq)=2015 group by month(xsrq);
#第二问
use library;
#答案2
select dzzh,(datediff(hsrq,jyrq)-30)*sj*0.01 as fk from borrow,book  where book.txm=borrow.txm and datediff(hsrq,jyrq)>30;
 
 #代码结束

 

任务描述

本关任务:工作人员gzry数据表如图所示,使用条件函数完成下列查询

数据库实验五 函数_第7张图片

相关知识

为了完成本关任务,你需要掌握: if case when then

if

if(关系表达式,值1,值2) 当条件表达式为真,返回值1,否则返回值2

case

case <表达式> when <条件1> then <值1> when <条件2> then <值2> …… else <值n+1> end 若表达式的值为条件1则返回值1,否则若表达式的值为条件2则返回值1……若都不相同则返回值n+1

任务要求

第一题 显示员工的姓名和费用(fy列),其中工资(gz)在2000以下的交50元,否则交100元。

数据库实验五 函数_第8张图片

第二题 显示员工的姓名和津贴(jt),其中部门(bm)是销售部津贴1000,办公室津贴800,采购部津贴500,仓库津贴300。

数据库实验五 函数_第9张图片


开始你的任务吧,祝你成功!

use sale;
#代码开始
#答案1
select gyxm,if(gz<2000,50,100) as fy from gzry; 

#答案2
select gyxm,case bm when "销售部" then 1000 when "办公室" then 800 when "采购部" then 500 else 300 end as jt from gzry;
 
 #代码结束

你可能感兴趣的:(数据库,开发语言,数据库,mysql)