[Mysql] CAST函数
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-29SELECT CAST('2017-08-29' AS DATE); -- 2022-04-27 15:42:19SELECT NOW();-- 2022-04-27SELECT CAST(NOW() AS DATE);
将值转换为DATETIME数据类型
-- 2022-04-27 00:00:00SELECT CAST('2022-04-27' AS DATETIME);
将值转换为TIME数据类型
-- 14:06:10SELECT CAST('14:06:10' AS TIME); -- 14:06:10SELECT CAST('2022-04-27 14:06:10' AS TIME);
将值转换为CHAR数据类型
-- '150'SELECT CAST(150 AS CHAR); -- 'Hello World437'SELECT CONCAT('Hello World',CAST(437 AS CHAR));
将值转换为SIGNED数据类型
-- 5SELECT CAST('5.0' AS SIGNED);-- 2SELECT (1 + CAST('3' AS SIGNED))/2;-- -5SELECT CAST(5-10 AS SIGNED); -- 6SELECT CAST(6.4 AS SIGNED);-- -6SELECT CAST(-6.4 AS SIGNED);-- 7SELECT CAST(6.5 AS SIGNED); -- -7SELECT CAST(-6.5 AS SIGNED);
将值转换为UNSIGNED数据类型
-- 5SELECT CAST('5.0' AS UNSIGNED);-- 6SELECT CAST(6.4 AS UNSIGNED);-- 0SELECT CAST(-6.4 AS UNSIGNED);-- 7SELECT CAST(6.5 AS UNSIGNED); -- 0SELECT CAST(-6.5 AS UNSIGNED);
7.将值转换为DECIMAL数据类型
-- 9SELECT CAST('9.0' AS DECIMAL);-- DECIMAL(数值精度,小数点保留长度)-- DECIMAL(10,2)可以存储最多具有8位整数和2位小数的数字-- 精度与小数位数分别为10与2-- 精度是总的数字位数,包括小数点左边和右边位数的总和-- 小数位数是小数点右边的位数-- 9.50SELECT CAST('9.5' AS DECIMAL(10,2));-- 99999999.99SELECT CAST('1234567890.123' AS DECIMAL(10,2));-- 220.232SELECT CAST('220.23211231' AS DECIMAL(10, 3));-- 220.232SELECT 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 MaterialFROM (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函数进行类型转换
结果展示:
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341