Mysql提供了两种将值转换成指定数据类型的函数
以下内容基于mysql8.0进行讲解。
语法如下:
CONVERT(expr,type)
convert(expr,type)语法与 CAST(expr AS type)是等效的,所以支持的数据类型也是一致的,可以直接参考Mysql cast函数
参数说明:
参数 | 描述 |
---|---|
expr | 必填。要转换的值、列名 |
type | 必填。要转换成的数据类型。mysql版本不同,支持的数据类型不同,使用时需注意。 |
数据类型支持如下
类型 | 描述 | 备注 |
---|---|---|
DATE | 将 value 转化为 DATE 类型。 格式: “YYYY-MM-DD” | |
DATETIME | 将 value 转化为 DATETIME 类型。格式: “YYYY-MM-DD HH:MM:SS” | |
DECIMAL[(M[,D])] | 将 value 转化为 DECIMAL 类型。使用可选的 M 和 D 参数指定最大位数(M)和小数点(D)后的位数 | |
TIME | 将 value 转化为 TIME 类型。格式: “HH:MM:SS” | |
CHAR | 将 value 转化为 CHAR 类型 (固定长度的字符串) | |
NCHAR | 将 value 转化为 NCHAR (类似 CHAR, 但生成一个具有国家字符集的字符串) | |
SIGNED | 将 value 转化为 SIGNED (有符号的 64 位整数) | |
UNSIGNED | 将 value 转化为 UNSIGNED (无符号 64 位整数) | |
BINARY | 将 value 转化为 BINARY (二进制字符串) | |
DOUBLE | 将value转化为DOUBLE类型 | Added in MySQL 8.0.17 |
FLOAT | 将value转化为FLOAT类型 。 | Added in MySQL 8.0.17 |
更多内容参考官网:Mysql 8.0 cast函数官网
CONVERT函数用于将字符串expr的字符集变成transcoding_name
语法结构
CONVERT(expr USING transcoding_name)
-- utf8mb4
SELECT CHARSET('ABC');
-- gbk
SELECT CHARSET(CONVERT('ABC' USING gbk));
SELECT CONVERT('abc' USING utf8mb4);
1.将值转换为DATE数据类型
-- 2022-05-25
SELECT CONVERT('2022-05-25', DATE);
-- 2022-05-25 17:58:48
SELECT NOW();
-- 2022-05-25
SELECT CONVERT(NOW(), DATE);
2.将值转换为DATETIME数据类型
-- 2022-05-25 00:00:00
SELECT CONVERT('2022-05-25', DATETIME);
3.将值转换为TIME数据类型
-- 14:06:10
SELECT CONVERT('14:06:10', TIME);
-- 2022-05-25 17:25:12
SELECT NOW();
-- 17:25:12
SELECT CONVERT(NOW(), TIME);
4.将值转换为CHAR数据类型
-- '150'
SELECT CONVERT(150, CHAR);
-- 'Hello World437'
SELECT CONCAT('Hello World',CONVERT(437, CHAR));
5.将值转换为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);
6.将值转换为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);
7.将值转换为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
CAST() 和 CONVERT() 都可以更改 MySQL 中的数据类型。主要区别在于 CONVERT() 还可以将数据的字符集转换为另一个字符集。CAST() 就不能用于更改字符集。