【MySQL】数据库函数通关教程上篇(聚合、数学、字符串(2)

🐱 常用字符串函数一览表:

函数说明
LENGTH( s )按照字节计算 s 的长度,具体由编码格式决定
CHAR_LENGTH( s )返回字符串 s 的字符数
CHARCTER_LENGTH( s )返回字符串 s 的字符数
CONCAT(s1,s2 … sn)将字符串 s1 s2 等多个字符串合并成一个字符串
CONCAT_WS(D,s1,s2 … sn)合并多个字符串,并以 D 为分隔符
FIELD(s,s1,s2…)返回第一个字符串在字符串列表(s1,s2…)中的位置
LTRIM( s )去除字符串左边的空格
RTRIM( s )去除字符串右边的空格
TRIM( s )去除字符串两边的空格
MID(s,n,len)从字符串的 s 的 n 位置截取长度为 len 的字符串
POSITION( s1 IN s)返回 s1 在 字符串 s 中第一次出现的位置
REPLACE(s,s1,s2)将字符串 s2 替代 s 中的所有字符串 s1
REVERSE( s )反转字符串 s
RIGHT(s,n)返回字符串后 n 个字符
STARCMP(s1,s2)比较字符串 s1 s2,如果相等返回0,s1>s2返回1,s1<s2返回-1

🖊 示例代码:

Tips: 答案在代码注释里哦~~~

-- 1.按照字节求长度,注意 utf-8 英文 1 字节 汉字 3 字节
SELECT LENGTH('hello');  -- 5
SELECT LENGTH('祢豆子');  -- 9

-- 2.求字符串长度
SELECT CHAR_LENGTH('祢豆子');  -- 3

-- 3.合并字符串
SELECT CONCAT('我','是','祢豆子');  -- 我是祢豆子
SELECT CONCAT_WS('!','我','是','祢豆子');  -- 我!是!祢豆子

-- 4.返回字符串在列表的第一个位置,没有则返回0
SELECT FIELD('Nezuko','大头','小牛马','Nezuko','几何心凉','Nezuko');  -- 3
SELECT FIELD('小鹏','大头','小牛马');  -- 0

-- 5.去除空格
SELECT LTRIM(' Nezuko');  -- Nezuko
SELECT RTRIM('Nezuko ');  -- Nezuko
SELECT TRIM(' Nezuko ');  -- Nezuko

-- 6.字符串截取
SELECT MID('我是祢豆子',3,3);  -- 祢豆子

-- 7.获取位置
SELECT POSITION('627' IN 'Nezuko627');  -- 7

-- 8.替换字符
SELECT REPLACE('是你的大头大头','大头','小牛马');  -- 是你的小牛马小牛马

-- 9.反转字符串
SELECT REVERSE('我喜欢你'); -- 你欢喜我

-- 10.返回字符串后几个字符
SELECT RIGHT('Nezuko627',3);  -- 627

-- 11.字符串比较
SELECT STRCMP('abc','abc');  -- 0
SELECT STRCMP('azc','abc');  -- 1
SELECT STRCMP('abcd','abcdzzzzzz');  -- -1


📖 小提示: 在字符串比较中,比较的是字典顺序,比如 b > a。


4 日期函数

日期函数相关内容大家了解下即可,需要使用的时候回过头来再查找。

4.1 常见日期函数与使用

🐘 常用日期函数一览表:

函数名称说明
UNIX_TIMESTAMP()返回从1970-01-01 00:00:00 到当前的毫秒值
UNIX_TIMESTAMP(DATE_STRING)将指定日期转化成为时间戳
FROM_UNIXTIME(BIGINT UNIXTIME,STRINGFORMAT)将毫秒值时间戳转为指定格式日期
CURDATE()返回当前日期
CURRENT_DATE()返回当前日期
DATEDIFF(X, Y)获取日期差值,返回 Y 距离 X 有多少天
TIMEDIFF(X,Y)获取时间差值,返回 Y 距离 X 有多少秒
DATE_FORMAT(DATE,STRINGFORMAT)日期格式化
DATE_SUB(DATE,INTERVAL X DAY/MOUTH…)日期减法
DATE_ADD(DATE,INTERVAL X DAY/MONTH…)日期加法
EXTRACT(MONTH/DAY/YEAR/HOUR FROM DATE)从日期中获取月、日等

🖊 示例代码:

Tips: 答案在代码注释里哦~~~

-- 1.获取时间戳
SELECT UNIX_TIMESTAMP();  -- 1653890515

-- 2.将一个日期转化为毫秒值
SELECT UNIX_TIMESTAMP('2022-05-30 14:02:57');  -- 1653890577

-- 3.将时间戳转化为指定格式的日期
SELECT FROM_UNIXTIME(1653890577,'%Y-%m-%d %H-%i-%s');  -- 2022-05-30 14-02-57

-- 4.获取当前年月日
SELECT CURDATE();  -- 2022-05-30

-- 5.获取当前时分秒
SELECT CURRENT\_TIME();  -- 14:05:30

-- 6.获取当前时间包括年月日时分秒
SELECT CURRENT\_TIMESTAMP();  -- 2022-05-30 14:07:12

-- 7.获取日期之间的差值(天)
SELECT DATEDIFF('2022-05-30','2008-07-23');  -- 5059

-- 8.获取时间差值
SELECT TIMEDIFF('17:00:00','16:00:00');  -- 01:00:00

-- 9.日期格式化
SELECT DATE_FORMAT('2022-6-1 14:16:5','%Y-%m-%d %H-%i-%s');  -- 2022-06-01 14-16-05

-- 10.日期加减
SELECT DATE_ADD('2022-06-01',INTERVAL 1 DAY);  -- 2022-06-02
SELECT DATE_SUB('2022-06-01',INTERVAL 1 DAY);  -- 2022-05-31

-- 11.从日期中获取年、日、月
SELECT EXTRACT(YEAR FROM '2022-06-01');  -- 2022
SELECT EXTRACT(DAY FROM '2022-06-01');  -- 1
SELECT EXTRACT(MONTH FROM '2022-06-01');  -- 6

4.2 日期格式

🐍 日期格式附表:

格式描述
%a缩写星期名
%b缩写月名
%c月,数值
%D带有英文前缀的月中的天
%d月的天,数值(00-31)
%e月的天,数值(0-31)
%f微秒
%H小时(00-23)
%h小时(01-12)
%I小时(01-12)
%i分钟,数值(00-59)
%j年的天(001-366)
%k小时(0-23)
%l小时(1-12)
%M月名
%m月,数值(00-12)
%pAM 或 PM
%r时间,12-小时(hh:mm:ss AM 或 PM)
%S秒(00-59)
%s秒(00-59)
%T时间, 24-小时(hh:mm:ss)
%U周(00-53)星期日是一周的第一天
%u周(00-53)星期一是一周的第一天
%V周(01-53)星期日是一周的第一天,与 %X 使用
%v周(01-53)星期一是一周的第一天,与 %x 使用
%W星期名
%w周的天(0=星期日, 6=星期六)
%X年,其中的星期日是周的第一天,4 位,与 %V 使用
%x年,其中的星期一是周的第一天,4 位,与 %v 使用
%Y年,4 位
%y年,2 位

5 控制流函数

5.1 if逻辑判断语句

格式说明
IF(expr,v1,v2)如果表达式 expr 成立,返回 v1,否则返回 v2
IFNULL(v1,v2)v1如果为 NULL 则返回 v1,否则返回 v2
ISNULL(expr)判断表达式是否为 NULL,是就返回 1,反之为0
NULLIF(s1,s2)比较字符串,如果 s1 与 s2 相等,就返回 NULL,否则返回 s1

案例1️⃣: 查询判断成绩是否优秀

首先先准备下面的数据表,具体数据如图,数据表结构代码如下:

CREATE TABLE IF NOT EXISTS student(
    name VARCHAR(20),
    score INT
);
INSERT INTO student VALUES ('祢豆子', 95);
INSERT INTO student VALUES ('漩涡鸣人', 85);
INSERT INTO student VALUES ('佐助', 75);
INSERT INTO student VALUES ('路飞', 55);
INSERT INTO student VALUES ('乔巴', 45);

在这里插入图片描述
  下面使用逻辑判断语句进行确定是否优秀,并查询,参考代码及结果如下:

SELECT \*, IF(score >= 85, '优秀', '不优秀') 'grade'
FROM student;

在这里插入图片描述

❓ 这里我们仅仅将成绩分成了两类:优秀与不优秀。可是实际情况是成绩分为良好、及格与不及格,但是 if 逻辑判断语句却不能很好的解决,那我们究竟该如何操作才能将成绩分成3类呢? 我们引入 case when 语句。

5.2 case when语句

🍌 语法格式:

CASE expression
	WHEN condition1 THEN result1
	WHEN condition2 THEN result2
	...
	WHEN conditionN THEN resultN
	ELSE result
END

📖 说明:

CASE 表示函数的开始,END 表示函数的结束,如果 condition1 成立,则返回 result1,以此类推… … 如果都不成立,则返回 ELSE 后的 result

案例2️⃣: 将成绩分为良好、及格与不及格三类

我们还是使用案例1的数据表,并通过 case when函数来实现:

SELECT \*,
       CASE score
           WHEN score >= 85 THEN '良好'
           WHEN score >= 60 THEN '及格'
           ELSE '不及格'
           END AS 'grade'
FROM student;

在这里插入图片描述


写在最后

🌟以上便是本文的全部内容啦,后续内容将会持续免费更新,如果文章对你有所帮助,麻烦动动小手点个赞 + 关注,非常感谢 ❤️ ❤️ ❤️ !
如果有问题,欢迎私信或者评论区!
在这里插入图片描述

共勉:“你间歇性的努力和蒙混过日子,都是对之前努力的清零。”
在这里插入图片描述

写在最后

作为一名即将求职的程序员,面对一个可能跟近些年非常不同的 2019 年,你的就业机会和风口会出现在哪里?在这种新环境下,工作应该选择大厂还是小公司?已有几年工作经验的老兵,又应该如何保持和提升自身竞争力,转被动为主动?

就目前大环境来看,跳槽成功的难度比往年高很多。一个明显的感受:今年的面试,无论一面还是二面,都很考验Java程序员的技术功底。

最近我整理了一份复习用的面试题及面试高频的考点题及技术点梳理成一份“Java经典面试问题(含答案解析).pdf和一份网上搜集的“Java程序员面试笔试真题库.pdf”(实际上比预期多花了不少精力),包含分布式架构、高可扩展、高性能、高并发、Jvm性能调优、Spring,MyBatis,Nginx源码分析,Redis,ActiveMQ、Mycat、Netty、Kafka、Mysql、Zookeeper、Tomcat、Docker、Dubbo、Nginx等多个知识点高级进阶干货!

由于篇幅有限,为了方便大家观看,这里以图片的形式给大家展示部分的目录和答案截图!

Java经典面试问题(含答案解析)

阿里巴巴技术笔试心得

Jvm性能调优、Spring,MyBatis,Nginx源码分析,Redis,ActiveMQ、Mycat、Netty、Kafka、Mysql、Zookeeper、Tomcat、Docker、Dubbo、Nginx等多个知识点高级进阶干货!**

由于篇幅有限,为了方便大家观看,这里以图片的形式给大家展示部分的目录和答案截图!
[外链图片转存中…(img-PRD1Z7Ez-1714516710667)]

Java经典面试问题(含答案解析)

[外链图片转存中…(img-efme0I46-1714516710667)]

阿里巴巴技术笔试心得

[外链图片转存中…(img-KVMgEeMP-1714516710667)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 16
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值