CAST函数用于将值从一种数据类型转换为表达式中指定的另一种数据类型
语法
CAST(value AS datatype)
AS关键字用于分隔两个参数,在AS之前的是要处理的数据,在AS之后的是要转换的数据类型
参数说明
value: 要转换的值
datatype: 要转换成的数据类型
值 | 描述 |
DATE | 将value转换成'YYYY-MM-DD'格式 |
DATETIME | 将value转换成'YYYY-MM-DD HH:MM:SS'格式 |
TIME | 将value转换成'HH:MM:SS'格式 |
CHAR | 将value转换成CHAR(固定长度的字符串)格式 |
SIGNED | 将value转换成INT(有符号的整数)格式 |
UNSIGNED | 将value转换成INT(无符号的整数)格式 |
DECIMAL | 将value转换成FLOAT(浮点数)格式 |
BINARY | 将value转换成二进制格式 |
示例
1.将值转换为DATE数据类型
- -- 2017-08-29
- SELECT CAST('2017-08-29' AS DATE);
- -- 2022-04-27 15:42:19
- SELECT NOW();
- -- 2022-04-27
- SELECT CAST(NOW() AS DATE);
2.将值转换为DATETIME数据类型
- -- 2022-04-27 00:00:00
- SELECT CAST('2022-04-27' AS DATETIME);
3.将值转换为TIME数据类型
- -- 14:06:10
- SELECT CAST('14:06:10' AS TIME);
- -- 14:06:10
- SELECT CAST('2022-04-27 14:06:10' AS TIME);
4.将值转换为CHAR数据类型
- -- '150'
- SELECT CAST(150 AS CHAR);
- -- 出错Error
- SELECT CONCAT('Hello World',437));
- -- 'Hello World437'
- SELECT CONCAT('Hello World',CAST(437 AS CHAR));
5.将值转换为SIGNED数据类型
- -- 5
- SELECT CAST('5.0' AS SIGNED);
- -- 2
- SELECT (1 + CAST('3' AS SIGNED))/2;
- -- -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);
6.将值转换为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);
7.将值转换为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));
练习案例
导入数据
- DROP TABLE IF EXISTS `Material`;
- CREATE TABLE `Material` (
- `ID` varchar(255) DEFAULT NULL,
- `Material` varchar(255) DEFAULT NULL,
- `FileName` varchar(255) DEFAULT NULL
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
- INSERT INTO `Material` VALUES ('1', '07-100215-01', 'FD03-FCZ-220430012624541.txt');
- INSERT INTO `Material` VALUES ('2', '07-100390-01', 'FD03-FCZ-210318012624541.txt');
- INSERT INTO `Material` VALUES ('3', '07-1043-01', 'FD03-FCZ-170430012624541.txt');
- INSERT INTO `Material` VALUES ('4', '07-1044-01', 'FD03-FCZ-191225012624541.txt');
- INSERT INTO `Material` VALUES ('5', '07-1045-01', 'FD03-FCZ-200601012624541.txt');
- INSERT INTO `Material` VALUES ('6', '07-1046-01', 'FD03-FCZ-180705012624541.txt');
Material表
Material:料号 FileName:文件名称(存储相应料号位置)
注明: ID,Material,FileName都是VARCHAR类型
FileName取值举例说明:'FD03-FCZ-220430012624541.txt',红色标注数字代表年月日,其余都取值相同(不用考虑具体含义)
问题:查询小于220401(整数类型年月日数值)的Material
- SELECT Material
- FROM (SELECT Material,(CAST(SUBSTRING(FileName,10,6)AS SIGNED))AS 'time'
- FROM Material
- WHERE 'time' < 220401)AS filter_material;
解题思路
利用SUBSTRING函数截取FileName值中代表年月日的数字
由于FileName中的值为varchar类型,220401为整数类型,需要使用CAST函数进行类型转换
结果展示:
文章知识点与官方知识档案匹配,可进一步学习相关知识