前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL 常用函数

MySQL 常用函数

作者头像
恋喵大鲤鱼
发布2023-10-12 16:22:08
1880
发布2023-10-12 16:22:08
举报
文章被收录于专栏:C/C++基础
MySQL 提供了丰富的内置函数,用于执行各种操作,包括数据处理、数学运算、字符串处理、日期和时间操作、聚合函数等。

本文介绍一些常用的 MySQL 内置函数,更多更详细的函数介绍请参阅官方文档 Functions and Operators

1.数学函数

ABS()

返回 X 的绝对值,如果 X 为 NULL 则返回 NULL。

代码语言:javascript
复制
ABS(X)

CEIL()

返回不小于X的最小整数值。如果X为NULL则返回NULL。等同于 CEILING()。

代码语言:javascript
复制
CEIL(X)

FLOOR()

返回不大于 X 的最大整数值。如果 X 为 NULL,则返回 NULL。

代码语言:javascript
复制
FLOOR(X)

CONV()

函数用于数值进制间的转化,如二进制与十进制之间的转换,十进制与十六进制转换等等。

代码语言:javascript
复制
CONV(N,from_base,to_base)

N 为待转换的整数,指定时可以是整数或字符串。from_base 表示初始的进制,to_base 表示转化后的进制,进制必须处于 [2, 36] 之间,否则返回 NULL。

任意参数为 NULL 则返回 NULL。

使用示例如下:

代码语言:javascript
复制
SELECT CONV('a',16,2);					-- 1010
SELECT CONV('6E',18,8);					-- 172
SELECT CONV(-17,10,-18);				-- -H
SELECT CONV(10+'10'+'10'+X'0a',10,10);	-- 40

注意:非数字的数值,比如十六进制的 0xff,传入函数时,以字符串的形传入:‘ff’。

2.字符串函数

CONCAT()

用于连接字符串或表字段。

可能有一个或多个参数。如果所有参数都是非二进制字符串,则结果为非二进制字符串。如果参数包含任何二进制字符串,则结果为二进制字符串。数值参数被转换为等效的非二进制字符串形式。

如果任何参数为NULL, CONCAT()返回NULL。

代码语言:javascript
复制
CONCAT(str1,str2,...)

(1)连接字符串。

代码语言:javascript
复制
SELECT CONCAT('My', 'S', 'QL');
-> 'MySQL'

SELECT CONCAT('My', NULL, 'QL');
-> NULL

SELECT CONCAT(14.3);
-> '14.3'

(2)连接数据表字段。

代码语言:javascript
复制
SELECT CONCAT(f_name, " ", l_name) AS name FROM employee WHERE level>3 limit 1;

结果:

代码语言:javascript
复制
+---------------+ 
| name          | 
+---------------+ 
| Monica Sehgal |

注意:这里用到 CONCAT() 函数,用来把字符串串接起来。另外,AS 关键字给结果列CONCAT(f_name, " ", l_name)起了个别名。

CONCAT_WS()

用于连接字符串并指定分隔符,是 CONCAT() 的一种特殊形式。其中 WS 是 With Separator 的简写。

代码语言:javascript
复制
CONCAT_WS(separator,str1,str2,...)

用法示例:

代码语言:javascript
复制
SELECT CONCAT_WS(',','First name','Second name','Last Name');
-> 'First name,Second name,Last Name'

SELECT CONCAT_WS(',',f_name,l_name) AS Name from employee where level>3;
-> 'Monica,Sehgal'

GROUP_CONCAT()

使用 GROUP BY 子句时,可使用 GROUP_CONCAT() 聚集函数将分组中的某个字段进行拼接。如果没有非空值,则返回 NULL。

完整的语法如下所示:

代码语言:javascript
复制
GROUP_CONCAT([DISTINCT] expr [,expr ...]
             [ORDER BY {unsigned_integer | col_name | expr}
                 [ASC | DESC] [,col_name ...]]
             [SEPARATOR str_val])

用法示例:

代码语言:javascript
复制
SELECT student_name, GROUP_CONCAT(test_score)
	FROM student
	GROUP BY student_name;

# 或者
SELECT student_name, GROUP_CONCAT(DISTINCT test_score ORDER BY test_score DESC SEPARATOR ' ')
       FROM student
       GROUP BY student_name;

SUBSTR()

用于从字符串中提取子字符串,根据指定的起始位置和长度,从输入字符串中截取一部分子字符串。

SUBSTR() 等同于 SUBSTRING()。

主要用法有:

代码语言:javascript
复制
SUBSTR(str,pos)
SUBSTR(str FROM pos)
SUBSTR(str,pos,len)
SUBSTR(str FROM pos FOR len)

参数 str 为原字符串;pos为下标,从 1 开始,如果为负数表示从后往前;len 表示截取的字符数。

代码语言:javascript
复制
SELECT SUBSTRING('Quadratically',5); -- 'ratically'

SELECT SUBSTRING('foobarbar' FROM 4); -- 'barbar'

SELECT SUBSTRING('Quadratically',5,6); -- 'ratica'

SELECT SUBSTRING('Sakila', -3); -- 'ila'

SELECT SUBSTRING('Sakila', -5, 3); -- 'aki'

SELECT SUBSTRING('Sakila' FROM -4 FOR 2); -- 'ki'

SUBSTRING_INDEX()

按分隔符截取字符串前 N 个或者后 N 个子串。函数原型如下:

代码语言:javascript
复制
SUBSTRING_INDEX(str,delim,count)

SUBSTRING_INDEX() 返回字符串按分隔符 delim 分隔的 count 个子串,对分隔符区分大小写。如果计数 count 为正,则返回从左到右 count 个子串。如果计数为负数,则返回从右边到左 count 个子串。

用法示例:

代码语言:javascript
复制
SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);
-> 'www.mysql'

SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2);
 -> 'mysql.com'

3.日期和时间函数

NOW()

返回当前日期时间。

如果 fsp 参数指定从0到6的秒精度,则返回值包含该位数的秒小数部分。

代码语言:javascript
复制
NOW([fsp])

示例:

代码语言:javascript
复制
SELECT NOW(); 	-- 2023-09-26 04:26:53
SELECT NOW(3);  -- 2023-09-26 07:04:39.211

CURDATE()

以“YYYY-MM-DD”或 YYYYMMDD 格式返回当前日期,具体取决于该函数是在字符串还是数字上下文中使用。

代码语言:javascript
复制
SELECT CURDATE(); -- 2023-09-26

CURTIME()

返回当前时间为 ‘hh:mm:ss’ 或 hhmmss 格式的值,具体取决于函数是在字符串上下文中使用还是在数字上下文中使用。以会话时区表示。

如果 fsp 参数指定从 0 到 6 的秒精度,则返回值包含该位数的秒小数部分。

代码语言:javascript
复制
CURTIME([fsp])

示例:

代码语言:javascript
复制
SELECT CURTIME();  -- 07:10:44
SELECT CURTIME(3); -- 07:10:57.339

时间选取函数

代码语言:javascript
复制
SET @dt = '2019-04-16 15:05:12.123456';

DATE(@dt):返回日期,示例结果2019-04-16
TIME(@dt):返回时间,示例结果15:05:12.123456
YEAR(@dt):返回年 ,示例结果2019
MONTH(@dt):返回月,示例结果4
MONTHNAME(@dt):返回月份的全名,示例结果 April
DAY(@dt):返回月份中日,在1到31范围内。示例结果16。等同于 
DAYOFMONTH(@dt):等同于 DAY()
DAYNAME(@dt) :返回@dt的星期名字。示例结果 Tuesday
DAYOFYEAR(@dt) :返回@dt在一年中的日数,范围在1到366。示例结果106
HOUR(@dt):返回时,示例结果15
MINUTE(@dt):返回分,示例结果05
SECOND(@dt):返回秒,示例结果12
MICROSECOND(@dt):返回微秒,示例结果123456
QUARTER(@dt):返回季度,范围1到4。示例结果2
WEEK(@dt):返回周,范围0到52。示例结果15

时间戳与日期转换

Unix 时间戳转换为日期用函数: FROM_UNIXTIME()。

代码语言:javascript
复制
SELECT FROM_UNIXTIME(1156219870);

日期转换为 Unix 时间戳用函数: UNIX_TIMESTAMP()。

代码语言:javascript
复制
SELECT UNIX_TIMESTAMP(’2006-11-04 12:23:00′);

4.聚合函数

AVG()

返回 expr 的平均值。DISTINCT 选项可用于返回 expr 的不同值的平均值。

如果没有匹配的行或 expr 为NULL,AVG() 返回 NULL。

代码语言:javascript
复制
AVG([DISTINCT] expr) [over_clause]

COUNT()

用于统计指定条件的行数。

代码语言:javascript
复制
COUNT(expr) [over_clause]

主要有如下几种用法:

代码语言:javascript
复制
-- 返回表的总记录数
COUNT(*)

-- 返回指定列的值的数目(NULL 不计入)
COUNT(<column>)

-- 返回指定列的不同值的数目
COUNT(DISTINCT <column>)

-- 返回符合指定条件的记录数
COUNT(IF(<condition>,TRUE,NULL))

-- 返回符合指定条件的记录数
COUNT(IF(<condition>,TRUE,NULL))

-- 返回符合指定条件的记录中某列不同值的数目
COUNT(DISTINCT <column>, IF(<condition>,TRUE,NULL))
-- 或
COUNT(DISTINCT CASE WHERE <condition> THEN <column> END)

尖括号中的内容表示实际使用时需要被替换为实际的值。

SUM()

返回 expr 的和。DISTINCT 关键字能用于对 expr 中不同的值求和。

如果没有匹配的行或 expr 为 NULL,SUM() 返回 NULL。

代码语言:javascript
复制
SUM([DISTINCT] expr) [over_clause]

5.比较函数

IN()

如果 expr 等于 IN() 列表中的任何值,则返回 1 (true),否则返回 0 (false)。

代码语言:javascript
复制
expr IN (value,...)

示例:

代码语言:javascript
复制
SELECT 2 IN (0,3,5,7); 						-- 0
SELECT 'wefwf' IN ('wee','wefwf','weg'); 	-- 1

IN() 还可用于行构造器表达式。

代码语言:javascript
复制
SELECT (3,4) IN ((1,2), (3,4)); -- 1
SELECT (3,4) IN ((1,2), (3,5)); -- 0

ISNULL()

测试参数是否为 NULL。

代码语言:javascript
复制
SELECT ISNULL(1+1); -- 0
SELECT ISNULL(1/0); -- 1

LEAST()

返回最小的参数。

代码语言:javascript
复制
LEAST(value1,value2,...)

示例:

代码语言:javascript
复制
SELECT LEAST(2,0); 					-- 0
SELECT LEAST(34.0,3.0,5.0,767.0); 	-- 3.0
mysql> SELECT LEAST('B','A','C');	-- 'A'

6.其它函数

INET_ATON()

给定以字符串形式表示的点分十进制 IPv4 地址,返回一个整数,该整数以网络字节顺序(大端)表示该地址的数值。

如果 expr 非法或为 NULL,则返回 NULL。

代码语言:javascript
复制
INET_ATON(expr)

示例:

代码语言:javascript
复制
SELECT INET_ATON('10.0.5.9'); -- 167773449

对于本例,返回值计算方式为10×256^3 + 0×256^2 + 5×256 + 9

INET_NTOA()

给定一个按网络字节顺序排列的数字,返回点分十进制 IPv4 地址。

如果 expr 非法或为 NULL,则返回 NULL。

代码语言:javascript
复制
INET_NTOA(expr)

示例:

代码语言:javascript
复制
SELECT INET_NTOA(167773449); -- '10.0.5.9'

参考文献

MySQL 8.0 Reference Manual :: 12 Functions and Operators 8.2.1.22 Row Constructor Expression Optimization

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MySQL 提供了丰富的内置函数,用于执行各种操作,包括数据处理、数学运算、字符串处理、日期和时间操作、聚合函数等。
  • 1.数学函数
    • ABS()
      • CEIL()
        • FLOOR()
          • CONV()
          • 2.字符串函数
            • CONCAT()
              • CONCAT_WS()
                • GROUP_CONCAT()
                  • SUBSTR()
                    • SUBSTRING_INDEX()
                    • 3.日期和时间函数
                      • NOW()
                        • CURDATE()
                          • CURTIME()
                            • 时间选取函数
                              • 时间戳与日期转换
                              • 4.聚合函数
                                • AVG()
                                  • COUNT()
                                    • SUM()
                                    • 5.比较函数
                                      • IN()
                                        • ISNULL()
                                          • LEAST()
                                          • 6.其它函数
                                            • INET_ATON()
                                              • INET_NTOA()
                                              • 参考文献
                                              相关产品与服务
                                              云数据库 MySQL
                                              腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
                                              领券
                                              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档