前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >最全的MySQL数据库函数:字符串函数、时间日期函数、数值函数详解

最全的MySQL数据库函数:字符串函数、时间日期函数、数值函数详解

作者头像
青山师
发布2023-05-05 19:25:30
7020
发布2023-05-05 19:25:30
举报
文章被收录于专栏:IT当时语_青山师_JAVA技术栈

最常用最实用的MySQL函数详解

高山仰止

  • 掌握case搜索函数的使用
  • 掌握ifnull函数的使用
  • 掌握字符串拼接、子串、移除、大小写转换函数
  • 掌握日期格式化函数的使用
  • 掌握常见的数值函数的使用
  • 掌握类型转换函数的使用

一 控制流程函数

环境准备

代码语言:javascript
复制
CREATE DATABASE fundb;
-- 数学成绩表
CREATE TABLE t_score_math (
  sname varchar(40) ,
  score double 
);

insert  into t_score_math values ('zs',100);
insert  into t_score_math values ('ls',69);
insert  into t_score_math values ('ww',78);
insert  into t_score_math values ('zl',97);
insert  into t_score_math values ('lq',58);

CREATE TABLE t_user (
  id int(11) NOT NULL AUTO_INCREMENT,
  uname varchar(40) DEFAULT NULL,
  age int(11) DEFAULT NULL,
  sex int(11) DEFAULT NULL,
  PRIMARY KEY (id)
);

insert  into t_user values (null,'zs',18,1);
insert  into t_user values (null,'ls',20,0);
insert  into t_user values (null,'ww',23,1);
insert  into t_user values (null,'zl',24,1);
insert  into t_user values (null,'lq',15,0);
insert  into t_user values (null,'hh',12,0);
insert  into t_user values (null,'wzx',60,null);
insert  into t_user values (null,'      lb   ',null,null);

知识点-case函数

1.高山

  • 掌握case函数的使用

2.演绎

  • case函数概述
  • 简单case函数
  • case搜索函数

3.攀登

3.1 case函数概述

更多精彩请访问本文源地址: https://blog.csdn.net/zixiao217 case 函数主要在sql中实现类似于java语言的分支语句的功能。case结合when语句可以灵活的根据字段的所属条件展示不同的内容。

case函数的作用: 可以针对某个字段满足某些条件来显示特定的信息。

简而言之,case函数类似于java中的switch…case语句。

case函数又分为简单case函数、case搜索函数。用的多的一般是case搜索函数,功能更强大,比如可以写一些条件表达式。

3.2 简单case函数【了解】
3.2.1 语法

简单case函数的语法如下:

代码语言:javascript
复制
CASE 字段
WHEN 值1 THEN 显示值1
WHEN 值2 THEN 显示值2
ELSE 显示其它值 END [as 字段]

说明:当字段值为 值1的时候,则显示值1; 为值2的时候,则显示值2; 否则显示其它值。

缺陷: 只能匹配一个值, 无法使用条件判断。

3.1.2 示例

练习1:从用户表中查询用户的性别信息,1显示男,0表示女,其他值显示其他。

代码语言:javascript
复制
select uname, 
	case sex 
	when 1 then '男'
	when 0 then '女'
	else '其他'
	end
from t_user;

练习2: 给练习1的case增加别名:性别

代码语言:javascript
复制
select uname, 
	case sex 
	when 1 then '男'
	when 0 then '女'
	else '其他'
	end as '性别'
from t_user;
3.3 case搜索函数【掌握】
3.3.1 语法

case搜索函数的语法如下:

代码语言:javascript
复制
CASE WHEN 条件1 THEN 显示值1
WHEN 条件1 THEN 显示值2
ELSE 其他显示值 END [as 字段]

说明:当满足条件1的时候,则显示值1; 当满足条件2的时候,则显示值2;否则显示其他值;也可以在end后面取别名。

优点: 比简单case函数更灵活,可以根据字段满足的条件,显示对应的信息。

注意:case when 子句只会有一个满足,如果满足了第一个,则后面的不会再执行。(回忆一下java的case 值: 表达式; break;

3.3.2 示例

练习1:从数学成绩表中查询每个学生的成绩,按以下要求显示信息:

分数

显示信息

90-100

优秀

80-89

良好

70-79

一般

60-69

合格

60以下

不合格

代码语言:javascript
复制
select sname,
	case when score>=90 then '优秀'
	when score>=80 and score<=89 then '良好'
	when score>=70 and score<=79 then '一般'
	when score>=60 and score<=69 then '合格'
	else  '不合格'
	end
from t_score_math;

练习2:将练习1的case函数显示为"成绩等级"展示:

代码语言:javascript
复制
select sname,
	case when score>=90 then '优秀'
	when score>=80 and score<=89 then '良好'
	when score>=70 and score<=79 then '一般'
	when score>=60 and score<=69 then '合格'
	else  '不合格'
	end as 成绩等级
from t_score_math;

4. 回望

case函数的作用

  • 可以针对某个字段满足某些条件来显示特定的信息

case搜索函数的语法

代码语言:javascript
复制
case 
when 条件1 then 值1
when 条件2 then 值2
else 其他值 
end [as 字段]

知识点-if相关函数

1.高山

  • 掌握if相关函数的使用

2.演绎

  • if函数
  • ifnull函数
  • nullif函数

3.攀登

3.1 if函数
3.1.1 语法
代码语言:javascript
复制
if(expr1,expr2,expr3)

说明: 如果 expr1 是TRUE,则 IF()的返回值为expr2; 否则返回值则为 expr3。if() 的返回值为数字值或字符串值,具体情况视其所在语境而定。

3.1.2 示例

练习1:获取用户的姓名、性别,如果性别为1则显示1,否则显示0;要求使用if函数查询:

代码语言:javascript
复制
SELECT uname, IF(sex, 1, 0) FROM t_user;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PMuDoal2-1571815436897)(img\1571365566405.png)]

3.2 ifnull函数
3.2.1 语法
代码语言:javascript
复制
ifnull(expr1,expr2)

说明:假如expr1 不为 NULL,则 IFNULL() 的返回值为 expr1; 否则其返回值为 expr2。ifnull()的返回值是数字或是字符串,具体情况取决于其所使用的语境。

3.2.2 示例

练习1:获取用户的姓名、性别,如果性别为null则显示为1;要求使用ifnull函数查询:

代码语言:javascript
复制
SELECT uname, IFNULL(sex, 1) FROM t_user;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-amc3Yqnr-1571815436897)(img\1571365818068.png)]

3.3 nullif函数
3.3.1 语法
代码语言:javascript
复制
nullif(expr1,expr2)

说明:如果expr1 = expr2 成立,那么返回值为NULL,否则返回值为 expr1

如: SELECT NULLIF(1,1); 其结果为null;SELECT NULLIF(1,2); 其结果则为1。

3.3.2 示例

练习1:获取用户的年龄,如果为60,则显示为null;要求使用nullif函数查询:

代码语言:javascript
复制
select uname, nullif(age, 60) from t_user;

4. 回望

if函数的语法

代码语言:javascript
复制
if(exp1, exp2, exp3)

ifnull函数的语法

代码语言:javascript
复制
ifnull(exp1, exp2)

nullif函数的语法

代码语言:javascript
复制
nullif(exp1, exp2)

二 字符串函数

知识点-字符串函数

1.高山

  • 掌握常见字符串函数的使用

2.演绎

  • 常见字符串函数清单
  • 字符串连接函数
  • 字符串大小写处理函数
  • 格式化函数
  • 移除、填充函数
  • 子串函数

3.攀登

3.1 常见字符串函数

常见的字符串函数清单如下所示:

函数或操作符

描述

concat(str1, str2, …)

字符串连接函数,可以将多个字符串进行连接

concat_ws(separator, str1, str2, …)

可以指定间隔符将多个字符串进行连接;

bin(N)

得到数值N的二进制表示形式:BIN(12) --》1100

format(exp, d)

返回一个格式化后的字符串;将exp使用指定小数位数d进行四舍五入显示,exp可以是数值也可以是能转换为数值的字符串

upper(str)

得到str的大写形式

lower(str)

得到str的小写形式

lpad(str, len, padstr)

将str填充至len的长度,不足长度的在左边用padstr进行重复填充

ltrim(str)

将str左边的空白符移除

rtrim(str)

将str右边的空白符移除

trim(str)

将str两边的空白符移除

substr()、substring()

获取子串: 1:substr(str, pos) 、substring(str, pos); 2:substr(str, pos, len)、substring(str, pos, len)

substring_index(str, delim, count)

在指定数量的分隔符出现之前,从字符串返回子字符串

3.2 字符串连接函数

字符串连接函数主要有2个:

函数或操作符

描述

concat(str1, str2, …)

字符串连接函数,可以将多个字符串进行连接

concat_ws(separator, str1, str2, …)

可以指定间隔符将多个字符串进行连接;

练习1:使用concat函数显示出 你好,uname 的结果

代码语言:javascript
复制
SELECT CONCAT('你好,' , uname) FROM t_user;

练习2:使用concat_ws函数显示出 你好,uname 的结果

代码语言:javascript
复制
SELECT CONCAT_WS(',', '你好', uname) FROM t_user;
3.3 字符串大小写处理函数

字符串大小写处理函数主要有2个:

函数或操作符

描述

upper(str)

得到str的大写形式

lower(str)

得到str的小写形式

练习1: 将字符串 hello 转换为大写显示

代码语言:javascript
复制
SELECT UPPER('hello'); -- HELLO

练习2:将字符串 heLLo 转换为小写显示

代码语言:javascript
复制
SELECT LOWER('heLLo'); -- hello
3.4 格式化函数

格式化函数了解2个:

函数或操作符

描述

bin(N)

得到数值N的二进制表示形式:BIN(12) --》1100

format(exp, d)

返回一个格式化后的字符串;将exp使用指定小数位数d进行四舍五入显示,exp可以是数值也可以是能转换为数值的字符串

练习1:得到数字 12 的二进制形式

代码语言:javascript
复制
SELECT BIN(12); -- 1100

练习2:得到数值 2345.9767 的文本格式化形式,且保留2位小数

代码语言:javascript
复制
SELECT FORMAT('2345.9767', 2); -- 2,345.98
3.5 移除、填充函数

可以对字符串进行按长度填充满、也可以移除空格符

函数或操作符

描述

lpad(str, len, padstr)lower(str)

将str填充至len的长度,不足长度的在左边用padstr进行重复填充

ltrim(str)

将str左边的空白符移除

rtrim(str)

将str右边的空白符移除

trim(str)

将str两边的空白符移除

练习1: 将 t_user表的uname位zs的用户姓名按10位显示,不足的左边填充0

代码语言:javascript
复制
SELECT LPAD(uname, 10, '0') FROM t_user WHERE uname = 'zs'; -- 00000000zs

练习2:将用户id位8的用户的姓名的左边空白符移除

代码语言:javascript
复制
-- 表中数据是:'      lb   ', 使用ltrim后是: 'lb   '
SELECT LTRIM(uname) FROM t_user  WHERE id = 8; 

练习3:将用户id位8的用户的姓名的右边空白符移除

代码语言:javascript
复制
-- 表中数据是:'      lb   ', 使用rtrim后是: '      lb'
SELECT RTRIM(uname) FROM t_user  WHERE id = 8; 

练习3: 将用户id位8的用户的姓名的两边空白符移除

代码语言:javascript
复制
-- 表中数据是:'      lb   ', 使用trim后是: 'lb'
SELECT TRIM(uname) FROM t_user  WHERE id = 8; 
3.6 子串函数

字符串也可以按条件进行截取,主要有以下可以截取子串的函数;

函数或操作符

描述

substr()、substring()

获取子串: 1:substr(str, pos) 、substring(str, pos); 2:substr(str, pos, len)、substring(str, pos, len)

substring_index(str, delim, count)

在指定数量的分隔符出现之前,从字符串返回子字符串

练习1:获取 hello,world 从第二个字符开始的完整子串

代码语言:javascript
复制
SELECT SUBSTR("hello,world", 2);  -- ello,world

练习2:获取 hello,world 从第二个字符开始但是长度为4的子串

代码语言:javascript
复制
SELECT SUBSTR("hello,world", 2, 4); -- ello

练习3:指定数量分隔符操作

代码语言:javascript
复制
SELECT SUBSTRING_INDEX("hello,world. hello,boy.hello,girl!", ".", 1);  -- 得到第一个.分隔的前面的所有内容
SELECT SUBSTRING_INDEX("hello,world. hello,boy.hello,girl!", ".", 2);  -- 得到第2个.分隔的前面的所有内容
SELECT SUBSTRING_INDEX("hello,world. hello,boy.hello,girl!", ".", 3);  -- 个数超过则返回全部
SELECT SUBSTRING_INDEX("hello,world. hello,boy.hello,girl!", ".", -1); -- 得到从尾部开始计数第一个分隔符.后面的所有内容
SELECT SUBSTRING_INDEX("hello,world. hello,boy.hello,girl!", ".", -2); -- 得到从尾部开始计数第2个分隔符.后面的所有内容
SELECT SUBSTRING_INDEX("hello,world. hello,boy.hello,girl!", ".", -3); -- 个数超过则返回全部

说明: SUBSTRING_INDEX 可以用于这类场景, 如果 字段值是 顶级/高级/上级/中级/初级 这种存储形式则很有用处。

4. 回望

三 时间日期函数

知识点-时间日期函数

1.高山

  • 掌握常见时间日期函数的使用

2.演绎

  • 表示特定时间的函数
  • 格式化相关函数
  • 运算相关函数

3.攀登

3.1 表示特定时间的函数

mysql提供了一些用于获取特定时间的函数:

函数或操作符

描述

curdate()、cruuent_date()

获取当前日期,如 2019-10-18

current_time(), current_time

获取当前时:分:秒,如:15:36:11

now()

获取当前的日期和时间,如:2019-10-18 15:37:17

sysdate()

获取当前的日期和时间,如:2019-10-18 15:37:17

练习1:获取当前的日期

代码语言:javascript
复制
select curdate();
select cruuent_date();

练习2: 获取当前的时间(仅仅需要时分秒)

代码语言:javascript
复制
select current_time();
select current_time;

练习3: 获取当前时间(包含年月日时分秒)

代码语言:javascript
复制
select now();
select sysdate();
3.2 格式化相关函数

常用的格式化函数如下:

函数或操作符

描述

date_format(date, format)

将date按指定的格式format显示出来

str_to_date(str,format)

把字符串str根据format格式转换为时间日期,要求str符合format的格式

  • 格式化需要了解的说明符

说明符

描述

%d

月里面的天 (00…31)

%H

表示小时 (00…23)

%h

表示小时 (01…12)

%i

分钟 (00…59)

%j

年里面的第多少天 (001…366)

%m

月 (00…12)

%s

秒(00…59)

%Y

年,4位表示如 2019

%y

年,2位如 19

练习1: 将当前时间显示成 2019-10-10 14:10:20 的形式

代码语言:javascript
复制
select date_format(now(), '%Y-%m-%d %H:%i:%s');

练习2: 将字符串 2019-10-10 14:10:20 转换为时间日期数据类型

代码语言:javascript
复制
select str_to_date('2019-10-10 14:10:20', '%Y-%m-%d %H:%i:%s');
3.3 运算相关函数

关于时间日期的运算,常见的有日期的增减等操作,也有一些常见的函数如下表:

函数或操作符

描述

date_add(date, interval expr type)

日期增加函数; 将date按type类型进行增加expr天; type的值有 DAY、MONTH、YEAR、MINUTE、SECOND、HOUR;如果expr为负数,则变成了减法

date_sub(date, interval expr type)

与date_add类似,只不过是减法运算。如果expr为负数,则变成了加法

last_day(date)

获取date所在月的最后一天的日期形式

datediff(expr1, expr2)

expr1减去expr2的天数,仅仅是日期的减法

练习1:将当前日期往后加一天,显示其日期时间格式

代码语言:javascript
复制
select date_format(date_add(now(), interval 1 day),  '%Y-%m-%d %H:%i:%s');

练习2: 将当前日期往前一天的日期

代码语言:javascript
复制
select date_sub(curdate(), interval 1 day);

练习3:获取当前这个月的最后一天的日期

代码语言:javascript
复制
select last_day(now());

练习4: 中华人民共和国至今成立多少天了?

代码语言:javascript
复制
select datediff(now(), '1949-10-01');

4. 回望

四 数值函数

知识点-数值函数

1.高山

  • 掌握常见的数值函数

2.演绎

  • 掌握常见数值函数

3.攀登

3.1 常见的数值相关函数

常见的数值相关函数如下表:

函数或操作符

描述

abs(x)

获取数值x的绝对值

ceil(x)

向上取整,获取不小于x的整数值

floor(x)

向下取证,获取不大于x的整数值

pow(x, y)

获取x的y次幂

rand()

获取一个0-1之间的随机浮点数

练习1: 获取 -12 的绝对值

代码语言:javascript
复制
select abs(-12);

练习2: 将 -11.2 向上取整

代码语言:javascript
复制
select ceil(-11.2);

练习3: 将 1.6 向下取整

代码语言:javascript
复制
select floor(1.6);

练习4: 获得2的32次幂的值

代码语言:javascript
复制
select pow(2, 32);

练习5: 获得一个在0-100之间的随机数

代码语言:javascript
复制
select rand()*100;

4. 回望

五 通用函数

知识点-通用函数

1.高山

  • 掌握常见的通用函数

2.演绎

  • 类型转换函数
  • 休眠函数

3.攀登

3.1 类型转换函数

类型转换函数主要有以下2个:

函数

描述

cast(exp AS type)

将exp转换为指定类型type

convert(expr , type)

将exp转换为指定类型type

练习1:将字符串转换为无符号整型,使用cast函数

代码语言:javascript
复制
select cast('123' as unsigned int);

练习1:将字符串转换为无符号整型,使用convert函数

代码语言:javascript
复制
select convert('123', unsigned int);
3.2 休眠函数

休眠函数如下:

函数

描述

sleep(duration)

睡眠指定duration秒数

练习1: 获取当前时间以及2秒之后的时间

代码语言:javascript
复制
select now(), sleep(2), now();

4. 回望

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-10-23,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 最常用最实用的MySQL函数详解
  • 高山仰止
  • 一 控制流程函数
    • 环境准备
      • 知识点-case函数
        • 1.高山
        • 2.演绎
        • 3.攀登
        • 4. 回望
      • 知识点-if相关函数
        • 1.高山
        • 2.演绎
        • 3.攀登
        • 4. 回望
    • 二 字符串函数
      • 知识点-字符串函数
        • 1.高山
        • 2.演绎
        • 3.攀登
        • 4. 回望
    • 三 时间日期函数
      • 知识点-时间日期函数
        • 1.高山
        • 2.演绎
        • 3.攀登
        • 4. 回望
    • 四 数值函数
      • 知识点-数值函数
        • 1.高山
        • 2.演绎
        • 3.攀登
        • 4. 回望
    • 五 通用函数
      • 知识点-通用函数
        • 1.高山
        • 2.演绎
        • 3.攀登
        • 4. 回望
    相关产品与服务
    云数据库 MySQL
    腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档