首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >MySQL数据库:第五章:常见函数

MySQL数据库:第五章:常见函数

作者头像
Java廖志伟
发布2022-09-28 10:41:41
发布2022-09-28 10:41:41
8760
举报
文章被收录于专栏:高级开发进阶高级开发进阶

回退至Mysql数据库理论与实战 #进阶4:常见函数

函数:类似于java中的”方法“,将完成某个功能的一系列步骤封装起来,对外暴露一个名字,供外界调用 当我们学习别人定义好的方法(函数),只需要关心两件事: ①叫什么(函数名) ②干什么(函数功能) sql中的函数:肯定有,并且仅有一个返回值 调用语法: select 函数名(实参列表); 一、数学函数: abs绝对值 mod取余 floor向下取整 truncate 截断 ceil向上取整 round四舍五入 注意: sql中的round支持两个重载,规则:先按绝对值四舍五入,然后再添加正负 round(x):只保留整数部位 round(x,d):保留小数点后一位 java中Math.round只支持一个参数,规则:Math.round(x)等价于Math.floor(x+0.5) Math.round(x) rand随机数 二、字符函数 upper转换成大写 lower转换成小写 length获取字节长度 char_length获取字符长度 substr截取子串 trim去掉前后空格或字符 concat拼接 strcmp比较两个字符串 instr获取子串第一次出现的索引,如果找不到,返回0 注意:sql中起始索引,一般从1开始! 三、日期函数 now当前日期+时间 curdate当前日期 curtime当前时间 datediff两个日期天数差 date_format日期——>字符 str_to_date字符——>日期 四、流程控制函数 1、if函数 2、case结构 形式1:类似于switch 形式2:类似于多重if

#一、数学函数 #abs绝对值 SELECT ABS(-1.5); #floor 向下取整,返回<=该参数的最大整数 SELECT FLOOR(-1.5); #ceil 向上取整,返回>=该参数的最小整数 SELECT CEIL(-1.5); #round 四舍五入 SELECT ROUND(-1.56); SELECT ROUND(-1.56,1); #truncate 截断 SELECT TRUNCATE(1.67,1); #rand随机数 0——1之间的小数[0,1) SELECT RAND(); #mod取余 SELECT MOD(10,3); SELECT 10%3; #二、字符函数 #length字节长度 SELECT LENGTH(‘john你好’); #char_length字符长度 SELECT CHAR_LENGTH(‘john你好’); #upper转大写 SELECT UPPER(last_name) FROM employees; #lower转小写 SELECT LOWER(last_name) FROM employees; #concat拼接 SELECT CONCAT(first_name,last_name) FROM employees; #substr截取子串

注意:起始索引从1开始 包含起始索引 substr(str,起始索引,截取字符的长度):截取从起始索引(包含)开始,指定长度的子串 substr(str,起始索引):截取从起始索引开始,一直到后面所有的子串

SELECT SUBSTR(‘hello,郭襄爱上了杨过’,1,5); SELECT SUBSTR(‘hello,郭襄爱上了杨过’,12,2); SELECT SUBSTR(‘hello,郭襄爱上了杨过’,12); #练习:查询员工的姓名,其中姓首字符大写,其他字符小写。 #名前两个字符大写,去其他字符小写,中间用.拼接,最终起别名 :姓名 SELECT UPPER(SUBSTR(last_name,1,2)) SELECT LOWER(SUBSTR(last_name,3)) SELECT CONCAT(UPPER(SUBSTR(first_name,1,1)),LOWER(SUBSTR(first_name,2)),’.’,UPPER(SUBSTR(last_name,1,2)),LOWER(SUBSTR(last_name,3))) 姓名 FROM employees; #instr

类似于java中indexOf 功能:获取子串第一次出现的索引,如果找不到,返回0!

SELECT INSTR(‘郭襄张三丰郭襄爱上了郭襄’,‘郭小襄’); #trim

trim(【substr from 】str):去掉str前后的指定的子串。如果substr from省略,默认去掉空格

代码语言:javascript
复制
SELECT TRIM('哈' FROM '哈哈哈哈he哈llo张 三 丰哈哈哈哈') AS 备注;
#strcmp

功能:比较两个字符串大小, 如果前者比后者大,则返回1, 如果前者比后者小,则返回-1 如果相等,则返回0

代码语言:javascript
复制
SELECT STRCMP('hillo','hillo');

#三、日期函数

代码语言:javascript
复制
#获取当前日期+时间
SELECT NOW();
#只获取当前日期,不包含时间
SELECT CURDATE();
#只获取当前时间,不包含日期
SELECT CURTIME();
#获取两个日期之差(前面-后面的天数差)
SELECT DATEDIFF('2018-8-18','2018-8-9');
#将日期转换成指定格式的字符串
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s %W') 日期;
#将字符串解析成日期
SELECT STR_TO_DATE('2018-10-19 10:40:09 Friday','%Y-%m-%d %H:%i:%s %W') 日期;
#案例:将入职日期早于'09-09/2000'的员工信息
SELECT * FROM employees WHERE hiredate<STR_TO_DATE('09-09/2000','%m-%d/%Y');

#四、流程控制函数 #1、if函数 类似于java的三元运算符。 参数1:条件 参数2:条件成立,返回的值 参数3:条件不成立,返回的值

代码语言:javascript
复制
SELECT IF(LENGTH(last_name)>LENGTH(first_name),'名大','姓大') 备注,
last_name,
first_name
FROM employees;

#2、case结构 回顾java的switch case语句 switch(判断的变量){ case 常量值1:语句1;break; case 常量值2:语句1;break; case 常量值3:语句1;break; … default:语句n;break } 特点:做等值判断

语法1:类似于switch case,实现等值判断 case 判断的字段或表达式 when 值1 then 显示的值1 when 值2 then 显示的值2 … 【else 显示的值n】 end

代码语言:javascript
复制
#案例:显示不同职位的新工资。AD_VP 3倍  IT_PROG 4倍 FI_MGR 5倍
SELECT salary 原工资,job_id 职位,
CASE job_id
WHEN 'AD_VP' THEN SALARY*3
WHEN 'IT_PROG' THEN SALARY*4
WHEN 'FI_MGR' THEN SALARY*5
#ELSE SALARY
END  新工资
FROM employees;

语法2:类似于多重if的效果,实现区间判断 case when 条件1 then 显示的值1 when 条件2 then 显示的值2 … 【else 显示的值n】 end

代码语言:javascript
复制
#案例:显示工资级别,如果工资>20000,则显示A;如果工资>15000,则显示B,如果工资>10000,则显示C
#否则显示D
SELECT salary,
CASE
WHEN salary>20000 THEN 'A'
WHEN salary>15000 THEN 'B'
WHEN salary>10000 THEN 'C'
#else 'D'
END 级别
FROM employees;

#1. 显示系统时间(注:日期+时间) SELECT NOW(); #2. 查询员工号,姓名,工资,以及工资提高百分之 20%后的结果(new salary) SELECT employee_id,last_name,salary,salary*1.2 ‘new salary’ FROM employees; #3. 将员工的姓名按首字母排序,并写出姓名的长度(length) SELECT last_name,LENGTH(last_name) 长度 FROM employees ORDER BY SUBSTR(last_name,1,1); #4. 做一个查询,产生下面的结果 <last_name> earns monthly but wants <salary*3> Dream Salary King earns 24000 monthly but wants 72000

代码语言:javascript
复制
SELECT CONCAT(last_name,' earns ',salary,' monthly but wants ',salary*3) 'Dream Salary'
FROM employees
WHERE salary=24000;

#5. 使用 case-when,按照下面的条件: job                      grade AD_PRES            A ST_MAN              B IT_PROG             C SA_REP               D ST_CLERK           E 产生下面的结果 Last_name    Job_id       Grade king               AD_PRES       A

代码语言:javascript
复制
SELECT last_name,job_id,
CASE job_id
WHEN 'AD_PRES' THEN 'A'
WHEN 'ST_MAN' THEN 'B'
WHEN 'IT_PROG' THEN 'C'
WHEN 'SA_REP' THEN 'D'
WHEN 'ST_CLERK' THEN 'E'
END Grade
FROM employees
WHERE last_name = 'k_ing';
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-04-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档