前言
这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战 。
MySQL
常用函数不熟练?看我这篇就够了!!
▶ MySQL 常用函数总览
★ 字符串函数
LENGTH(str)
掌握指数:★★★★
函数说明:
返回
str
字符串字节长度
注意:
- 英文的一个字符为 1 个字节
GBK
编码的为 2 个字节UTF-8
编码的汉字为 3 个字节
SQL
语句示例:
1 | sql复制代码 |
INSERT(str,pos,len,newstr)
掌握指数:★★★
函数说明:
向
str
中第pos
位置开始插入长度为len
的newStr
字符串
SQL
语句示例:
如果我想给 str = 'HUALEI'
,想用 insert()
函数将其拼接成 “HUALEI is a hansome boy.”,那我该怎么做呢?
1 | sql复制代码 |
注意: MySQL
中从 1 开始算下标,插入要满足 pos <= length(str)
。
那如果是中文汉字字符串呢,如何让 “青花瓷” 变成 “青花烤瓷”,“苏格拉底广场” 变成 “苏格拉底广场舞” ?
1 | sql复制代码 |
第一个 SQL
中 pos => 3
为汉字字符串的下标索引,从第三个汉字字符开始插入长度为 length('烤瓷')
的 '烤瓷'
;再看第二个 SQL
, 7 大于字符个数,但是并不大于 length('苏格拉底广场') => 18
,所以新字符串在最后一个位置上插入成功。
LEFT(str,len)
掌握指数:★★★
函数说明:
从字符串
str
左边开始截取长度为len
的字符串
SQL
语句示例:
1 | sql复制代码 |
那 “大家好” 这个汉字字符串我想左截取出 “大家”,该如何做呢?
1 | sql复制代码 |
奇怪,截取的结果和预期不一样,为什么呢?
注意: 这里的 len
还是并不是通过 length()
而是通过 char_length()
得到的,从 1 开始到 len
即为截取的目标字符串。
所以,对于中文字符串来说,正确的写法应该是:
select left('大家好', 2); # 大家
RIGHT(str,len)
掌握指数:★★★
函数说明:
从字符串
str
右边开始截取长度为len
的字符串
SQL
语句示例:
1 | sql复制代码 |
不赘述,和 LEFT()
一个道理。
SUBSTR(str FROM pos) <=> SUBSTR(str,pos) SUBSTR(str FROM pos FOR len) <=> SUBSTR(str,pos,len)
掌握指数:★★★★
函数说明:
从
str
的第pos
个位置开始截取长度为len
的子串,如果没有len
参数则截取到末尾
SQL
语句示例:
1 | sql复制代码 |
STRCMP(expr1,expr2)
掌握指数:★★★
函数说明:
expr1 > expr2 =>
返回 1;expr1 = expr2 =>
返回 0;expr1 < expr2 =>
返回 -1
SQL
语句示例:
1 | sql复制代码 |
CONCAT(str1,str2,…)
掌握指数:★★★★
函数说明:
将
str1
、str2
… 等字符串连接成一个新的字符串
SQL
语句示例:
1 | sql复制代码 |
注意: 只要连接的字符串中存在一个 null
值,最终结果也将是 null
。
1 | sql复制代码 |
LOCATE(substr,str) | POSITION(substr IN str) | INSTR(str,substr)
掌握指数:★★★★
函数说明:
返回子串
substr
在父串str
中的开始位置,如果父串中压根就不包含子串那么返回 0
SQL
语句示例:
1 | sql复制代码 |
小结:
- 三个函数都能拿到子串在父串中的开始位置
locate()
和position()
函数基本类似,就是参数列表不同,后者使用in
表示子串在父串里面中的position
位置,写起来比较好理解,更推荐使用instr()
和locate()
唯一不同的就是参数位置交换了,注意别搞混淆写反了
LOWER(str) | UPPER(str)
掌握指数:★★★
函数说明:
将
str
字符串全部小写(LOWER
)/大写(UPPER
)
SQL
语句示例:
1 | sql复制代码 |
注意: 仅对英文字符串有效,中文字符串无效。
1 | sql复制代码 |
LTRIM(str) | RTRIM(str) | TRIM([remstr FROM] str)
掌握指数:★★★★
函数说明:
去除 str 字符串中的空格
SQL
语句示例:
1 | sql复制代码 |
注意: trim()
函数只会去除 str
字符串前后的空格并不会去除所有空格!
1 | sql复制代码 |
REPEAT(str,count)
掌握指数:★★
函数说明:
返回
str
重复count
遍后的结果
SQL
语句示例:
1 | sql复制代码 |
REVERSE(str)
掌握指数:★★
函数说明:
将字符串
str
按倒序反过来
SQL
语句示例:
1 | sql复制代码 |
RPAD(str,len,padstr) | LPAD(str,len,padstr)
掌握指数:★★★
函数说明:
指定
str
字符串长度len
,len > length(str)
不足用padstr
向右/左填充;len < length(str)
充足则根据指定长度进行截取。
SQL
语句示例:
1 | sql复制代码 |
★ 数学函数
FORMAT(X,D) | ROUND(X) | ROUND(X,D)
掌握指数:★★★★
函数说明:
对 X 四舍五入保留小数点后 D 位
SQL
语句示例:
1 | sql复制代码 |
CEIL(X) | FLOOR(X)
掌握指数:★★★★
函数说明:
ceil
天花板(向更大值方向)取整;floor
地板(向更小值方向)取整
SQL
语句示例:
1 | sql复制代码 |
MOD(N,M)
掌握指数:★★★
函数说明:
取
N / M
的余数,等价于N % M
SQL
语句示例:
1 | sql复制代码 |
POW(X,Y) | POWER(X,Y)
掌握指数:★★★
函数说明:
返回 X 的 Y 次方
SQL
语句示例:
1 | sql复制代码 |
SQRT(X)
掌握指数:★★★
函数说明:
返回 X 的平方根,也就是对 X 开平方
SQL
语句示例:
1 | sql复制代码 |
GREATEST(expr1, expr2, expr3, …) | LEAST(expr1, expr2, expr3, …)
掌握指数:★★★
函数说明:
返回参数列表中最大/最小值
注意: 参数列表可以是字符序列。
SQL
语句示例:
1 | sql复制代码 |
RAND()
掌握指数:★★★★★
函数说明:
返回 (0, 1) 之间的随机数
SQL
语句示例:
1 | sql复制代码 |
聚合函数 MAX(expr) | MIN(expr) | SUM(expr) | COUNT(expr) | AVG([DISTINCT] expr)
掌握指数:★★★★★
函数说明:
聚合函数,配合
group by
使用,用来求最大、小值/求和/计数/求平均值
SQL
语句示例:
1 | sql复制代码 |
注意:
- 除非另有说明,否则聚合函数会忽略
null
值 - 如果在不包含
group by
子句的语句中使用聚合函数,就等效于对所有行进行分组,结果总是有一行 - 时间类型的值对
sum()
和avg()
无效!它们会将其换成数字,丢弃第一个非数字字符后的所有信息
另外,聚合函数可以传入独立的表达式作为参数:
1 | sql复制代码 |
★ 日期函数
CURDATE() <=> CURRENT_DATE
掌握指数:★★★★
函数说明:
返回当前日期,格式为
YYYY-MM-dd
SQL
语句示例:
1 | sql复制代码 |
CURTIME() <=> CURRENT_TIME
掌握指数:★★★★
函数说明:
返回当前时间,格式为
HH:mm:ss
SQL
语句示例:
1 | sql复制代码 |
NOW() <=> CURRENT_TIMESTAMP
掌握指数:★★★★
函数说明:
返回当前日期时间,格式为
YYYY-MM-dd HH:mm:ss
SQL
语句示例:
1 | sql复制代码 |
DAY(date) | DAYOFWEEK(date) | DAYOFMONTH(date) | DAYOFYEAR(date)
掌握指数:★★★★
函数说明:
返回
date
中dd
/ 这一天是这一周/月/年中的第几天
SQL
语句示例:
1 | sql复制代码 |
WEEK(date[,mode]) | WEEKOFYEAR(date)
掌握指数:★★★
函数说明:
Mode | First day of week |
---|---|
0 | Sunday => 1 |
1 | Monday => 1 |
使用
mode
指定星期天是一周中的第一天还是星期一,然后根据这个标准判断date
是一年的第几周,返回结果 (0, 52) ;WEEKOFYEAR()
总是以星期一作为一周的开始,即mode
固定就是 1
SQL
语句示例:
1 | sql复制代码 |
MONTH(date) | QUARTER(date)
掌握指数:★★★
函数说明:
返回
date
中的月份/所属季度
SQL
语句示例:
1 | sql复制代码 |
YEAR(date) | YEARWEEK(date,mode)
掌握指数:★★★★
函数说明:
返回
date
中的年份/年份+第几周
SQL
语句示例:
1 | sql复制代码 |
DAYNAME(date) | MONTHNAME(date)
掌握指数:★★
函数说明:
返回该天/月英文名
SQL
语句示例:
1 | sql复制代码 |
STR_TO_DATE(str,format) | DATE_FORMAT(date,format)
掌握指数:★★★★★
函数说明:
根据
date
字符串的格式,转换成日期,相反地,可以将date
转换成指定格式的字符串
SQL
语句示例:
1 | sql复制代码 |
DATEDIFF(expr1,expr2)
掌握指数:★★★★★
函数说明:
返回两个
date
相隔的天数
SQL
语句示例:
1 | sql复制代码 |
DATE_ADD(date,INTERVAL expr unit) | DATE_SUB(date,INTERVAL expr unit)
掌握指数:★★★★★
函数说明:
对
date
做加减法
SQL
语句示例:
1 | sql复制代码 |
TO_DAYS(date) | FROM_DAYS(N)
掌握指数:★★
函数说明:
给定一个
date
,返回从公元 0 年到date
的天数
小知识:历史并不存在公元 0 年,但 0 年是公元位数对齐的基础
SQL
语句示例:
1 | sql复制代码 |
☛ 流程控制函数
IF(expr1,expr2,expr3)
掌握指数:★★★★
函数说明:
判断 expr1 表达式真假,真返回 expr2,否则返回 expr3
SQL
语句示例:
1 | sql复制代码 |
IFNULL(expr1,expr2) | NULLIF(expr1,expr2)
掌握指数:★★★
函数说明:
IFNULL
用来判断expr1
是否为null
,如果不是则返回expr2
,否则返回expr1
;NULLIF
则是用来判断expr1、2
是否相等,相等则返回null
,否则返回expr1
SQL
语句示例:
1 | sql复制代码 |
注意: expr1 != null
,否则返回 null
。
1 | sql复制代码select nullif(null, 'HUALEI'); # null |
IF … ELSE 语句
掌握指数:★★★★
函数说明:
写法不同于
IF()
函数
语法:
1 | sql复制代码 |
SWITCH … CASE 语句
掌握指数:★★★★
函数说明:
开关语句
语法:
1 | sql复制代码 |
☛ 消息摘要函数
PASSWORD(str)
掌握指数:★★★
函数说明:
计算并返回密码字符串
SQL
语句示例:
1 | sql复制代码 |
注意: 该函数在 MySQL8.0.11
版本中被移除了。
MD5(str)
掌握指数:★★★★
函数说明:
计算
MD5
总和校验码
SQL
语句示例:
1 | sql复制代码 |
SHA(str) | SHA1(str)
掌握指数:★★★★
函数说明:
计算
SHA
/SHA1
总和校验码
SQL
语句示例:
1 | sql复制代码 |
☛ 对称加密函数
ENCODE(str,pass_str) | DECODE(crypt_str,pass_str)
掌握指数:★★★★
函数说明:
通过公共密钥加密(
Encode
编码)/解密(Decode
解码)
SQL
语句示例:
1 | sql复制代码 |
AES_ENCRYPT(str,key_str) | AES_DECRYPT(crypt_str,key_str) | DES_ENCRYPT(str[,{key_num|key_str}]) | DES_DECRYPT(crypt_str[,key_str])
掌握指数:★★★★
函数说明:
通过额
AES
(Advanced Encryption Standard 高级加密标准,作为DES
算法的替代品) /DES
(Data Encryption Standard 数据加密标准) 算法对称加密信息
SQL
语句示例:
1 | sql复制代码 |
☛ 系统信息函数
VERSION()
掌握指数:★★★★
函数说明:
返回当前 MySQL 版本号
SQL
语句示例:
1 | sql复制代码 |
USER() | CURRENT_USER
掌握指数:★★★★
函数说明:
返回当前用户角色
SQL
语句示例:
1 | sql复制代码 |
DATABASE()
掌握指数:★★★★
函数说明:
返回当前所在数据库名
SQL
语句示例:
1 | sql复制代码 |
CONNECTION_ID()
掌握指数:★★★
函数说明:
返回当前用户连接数
SQL
语句示例:
1 | sql复制代码 |
函数全概述
以上全部函数,我将它们归纳成一张思维导图,非常直观,供大家学习参考:
结尾
撰文不易,欢迎大家点赞、评论,你的关注、点赞是我坚持的不懈动力,感谢大家能够看到这里!Peace & Love。
本文转载自: 掘金