MySQL数据库中提供了很丰富的函数,这些函数可以帮助用户更加方便的处理表中的数据,他们会对传递进来的参数进行处理,并返回一个处理结果,也就是返回一个值。MySQL函数包括数学函数、字符串函数、日期和时间函数、条件判断函数、系统信息函数、加密函数、格式化函数等。通过这些函数,可以简化用户的操作。SELECT语句及其条件表达式都可以使用这些函数。同时,INSERT 、UPDATE、DELECT语句及其条件表达式也可以使用这些函数。本文主要讲解进制转换函数、IP地址转换函数、字符集转换函数、数据类型转换函数。函数列表如下:
函数名称 | 作 用 |
---|---|
ASCII(s) | 返回字符串s的第一个字符的ASCII码 |
BIN(x) | 返回x的二进制编码 |
HEX(x) | 返回x的十六进制编码 |
OCT(x) | 返回x的八进制编码 |
CONV(x,f1,f2) | 将x由f1进制数变成f2进制数并返回 |
INET_ATON(IP) | 将IP地址转换为数字表示,IP值需要加上引号 |
INET_NTOA(n) | 将数字n转换成IP形式 |
CHARSET(s) | 返回字符串s的字符集 |
CONVERT(s USING cs) | 将字符串s的字符集变成cs |
CAST(x AS type) | 将值从一种数据类型转换为表达式中指定的另一种数据类型 |
CAST(x AS type) | 将表达式expr的值转换为type数据类型 |
1、进制转换函数
进制转换函数用于不同进制的数字之间进行转换。有如下几种:
- ASCII(s) 返回字符串s的第一个字符的ASCII码;
- BIN(x) 返回x的二进制编码;
- HEX(x) 返回x的十六进制编码;
- OCT(x) 返回x的八进制编码;
- CONV(x,f1,f2) 将x由f1进制数变成f2进制数并返回;
SELECT
b'111101', -- 等号
b'1', -- 笑脸
b'11', -- 心
X'41', -- 字母A
x'41', -- 字母A
X'42', -- 字母B
ASCII('MY'), -- 返回字符串s的第一个字符的ASCII码
ASCII('MYSQL'), -- 返回字符串s的第一个字符的ASCII码
bin(11), -- 10进制转成2进制
hex('MYSQL'), -- 转成16进制
hex('青清'), -- 转成16进制
oct(9), -- 10进制转成2进制
conv('101',2,10), -- 指定进制转换(2进制转成10进制)
conv('101',2,4) -- 指定进制转换(2进制转成4机制)
2、IP地址转换函数
IP地址与数字相互转换的函数分别是 INET_ATON(IP) 和 INET_NTOA(n)。
- INET_ATON(IP):将IP地址转换为数字表示,IP值需要加上引号;
- INET_NTOA(n):将数字n转换成IP形式。
mysql> select INET_ATON('192.168.0.1'), INET_NTOA(3232235521);
+------------------------+-------------------------+
| INET_ATON('192.168.0.1') | INET_NTOA(3232235521) |
+------------------------+-------------------------+
| 3232235521 | 192.168.0.1 |
+------------------------+-------------------------+
1 row in set (0.00 sec)
3、字符集转换函数
字符集转换函数可以改变指定字符串的字符集。
- CHARSET(s): 返回字符串s的字符集。
- CONVERT(s USING cs):将字符串s的字符集变成cs。
mysql> SELECT CHARSET('ABC'), CHARSET(CONVERT('ABC' USING gbk));
+-------------------------+--------------------------+
| CHARSET('ABC') | CHARSET(CONVERT('ABC' USING gbk)) |
+-------------------------+--------------------------+
| utf8 | gbk |
+-------------------------+--------------------------+
1 row in set (0.00 sec)
4、数据类型转换函数
4.1 CAST(x AS type)
CAST函数用于将值从一种数据类型转换为表达式中指定的另一种数据类型,语法格式如下:
CAST(x AS type)
- 其中AS关键字用于分隔两个参数,在AS之前的是要处理的数据(x表示要转换的值),在AS之后的是要转换的数据类型(type表示要转换成的数据类型)。
type参数取值 | 描述 |
---|---|
DATE | 将expr转换成’YYYY-MM-DD’格式 |
DATETIME | 将expr转换成’YYYY-MM-DD HH:MM:SS’格式 |
TIME | 将expr转换成’HH:MM:SS’格式 |
CHAR | 将expr转换成CHAR(固定长度的字符串)格式 |
SIGNED | 将expr转换成INT(有符号的整数)格式 |
UNSIGNED | 将expr转换成INT(无符号的整数)格式 |
DECIMAL | 将expr转换成FLOAT(浮点数)格式 |
BINARY | 将expr转换成二进制格式 |
将值转换为DATE数据类型
-- 2017-08-29
SELECT CAST('2017-08-29' AS DATE);
-- 2022-09-15 10:35:37
SELECT NOW();
-- 2022-09-15
SELECT CAST(NOW() AS DATE);
将值转换为DATETIME数据类型
-- 2022-08-27 00:00:00
SELECT CAST('2022-08-27' AS DATETIME);
将值转换为TIME数据类型
-- 14:06:10
SELECT CAST('14:06:10' AS TIME);
-- 14:06:10
SELECT CAST('2022-04-27 14:06:10' AS TIME);
将值转换为CHAR数据类型
-- '150'
SELECT CAST(150 AS CHAR);
-- 出错Error
SELECT CONCAT('Hello World',437));
-- 'Hello World437'
SELECT CONCAT('Hello World',CAST(437 AS CHAR));
将值转换为SIGNED数据类型
-- 5
SELECT CAST('5.0' AS SIGNED);
-- 2
SELECT (1 + CAST('3' AS SIGNED))/2;
-- 其实MySQL能默认转换,输出124
SELECT CAST('123' AS UNSIGNED INTEGER) + 1
-- MySQL能默认转换,输出124
SELECT '123' + 1
-- -5
SELECT CAST(5-10 AS SIGNED);
-- 6
SELECT CAST(6.4 AS SIGNED);
-- -6
SELECT CAST(-6.4 AS SIGNED);
-- 7
SELECT CAST(6.5 AS SIGNED);
-- -7
SELECT CAST(-6.5 AS SIGNED);
将值转换为UNSIGNED数据类型
-- 5
SELECT CAST('5.0' AS UNSIGNED);
-- 6
SELECT CAST(6.4 AS UNSIGNED);
-- 0
SELECT CAST(-6.4 AS UNSIGNED);
-- 7
SELECT CAST(6.5 AS UNSIGNED);
-- 0
SELECT CAST(-6.5 AS UNSIGNED);
将值转换为DECIMAL数据类型
-- 9
SELECT CAST('9.0' AS DECIMAL);
-- DECIMAL(数值精度,小数点保留长度)
-- DECIMAL(10,2)可以存储最多具有8位整数和2位小数的数字
-- 精度与小数位数分别为10与2
-- 精度是总的数字位数,包括小数点左边和右边位数的总和
-- 小数位数是小数点右边的位数
-- 9.50
SELECT CAST('9.5' AS DECIMAL(10,2));
-- 99999999.99
SELECT CAST('1234567890.123' AS DECIMAL(10,2));
-- 220.232
SELECT CAST('220.23211231' AS DECIMAL(10, 3));
-- 220.232
SELECT CAST(220.23211231 AS DECIMAL(10, 3));
4.2 CONVERT(expr,type)
CONVERT函数用于将表达式expr的值转换为type数据类型,语法格式如下:
CONVERT(expr,type)
- 其中expr表示要转换的值,type表示要转换成的数据类型。
type参数取值 | 描述 |
---|---|
DATE | 将expr转换成’YYYY-MM-DD’格式 |
DATETIME | 将expr转换成’YYYY-MM-DD HH:MM:SS’格式 |
TIME | 将expr转换成’HH:MM:SS’格式 |
CHAR | 将expr转换成CHAR(固定长度的字符串)格式 |
SIGNED | 将expr转换成INT(有符号的整数)格式 |
UNSIGNED | 将expr转换成INT(无符号的整数)格式 |
DECIMAL | 将expr转换成FLOAT(浮点数)格式 |
BINARY | 将expr转换成二进制格式 |
将值转换为DATE数据类型
-- 2022-05-25
SELECT CONVERT('2022-05-25', DATE);
-- 2022-09-15 10:44:31
SELECT NOW();
-- 2022-09-15
SELECT CONVERT(NOW(), DATE);
将值转换为DATETIME数据类型
-- 2022-05-25 00:00:00
SELECT CONVERT('2022-05-25', DATETIME);
将值转换为TIME数据类型
-- 14:06:10
SELECT CONVERT('14:06:10', TIME);
-- 2022-09-15 10:44:31
SELECT NOW();
-- 10:44:31
SELECT CONVERT(NOW(), TIME);
**将值转换为CHAR数据类型 **
-- '150'
SELECT CONVERT(150, CHAR);
-- 出错Error
SELECT CONCAT('Hello World',437));
-- 'Hello World437'
SELECT CONCAT('Hello World',CONVERT(437, CHAR));
将值转换为SIGNED数据类型
-- 5
SELECT CONVERT('5.0', SIGNED);
-- 2
SELECT (1 + CONVERT('3', SIGNED))/2;
-- -5
SELECT CONVERT(5-10, SIGNED);
-- 6
SELECT CONVERT(6.4, SIGNED);
-- -6
SELECT CONVERT(-6.4, SIGNED);
-- 7
SELECT CONVERT(6.5, SIGNED);
-- -7
SELECT CONVERT(-6.5, SIGNED);
将值转换为UNSIGNED数据类型
-- 5
SELECT CONVERT('5.0', UNSIGNED);
-- 6
SELECT CONVERT(6.4, UNSIGNED);
-- 0
SELECT CONVERT(-6.4, UNSIGNED);
-- 7
SELECT CONVERT(6.5, UNSIGNED);
-- 0
SELECT CONVERT(-6.5, UNSIGNED);
将值转换为DECIMAL数据类型
-- 9
SELECT CONVERT('9.0', DECIMAL);
-- DECIMAL(数值精度,小数点保留长度)
-- DECIMAL(10,2)可以存储最多具有8位整数和2位小数的数字
-- 精度与小数位数分别为10与2
-- 精度是总的数字位数,包括小数点左边和右边位数的总和
-- 小数位数是小数点右边的位数
-- 9.50
SELECT CONVERT('9.5', DECIMAL(10,2));
-- 99999999.99
SELECT CONVERT('1234567890.123', DECIMAL(10,2));
-- 220.232
SELECT CONVERT('220.23211231', DECIMAL(10,3));
-- 220.232
SELECT CONVERT(220.23211231, DECIMAL(10,3));
评论区