导读:本期聚焦于小伙伴创作的《SQL中如何使用CAST和CONVERT函数进行数据类型强制转换》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《SQL中如何使用CAST和CONVERT函数进行数据类型强制转换》有用,将其分享出去将是对创作者最好的鼓励。

在SQL的实际开发场景中,经常会遇到不同数据类型的数据需要共同参与运算、比较或者存储的情况,比如将字符串类型的数字和整数类型的字段相加,或是将日期时间类型的数据转换为指定格式的字符串,这时候就需要使用数据类型强制转换功能。CAST和CONVERT是SQL标准及主流数据库中都支持的两个类型转换函数,能够灵活实现各类数据类型的转换需求。

SQL中如何使用CAST和CONVERT函数进行数据类型强制转换

CAST函数的基本用法

CAST函数是SQL标准的类型转换函数,语法简洁通用,在大多数关系型数据库中都能兼容使用,基本语法格式如下:

CAST(expression AS target_data_type)

其中expression表示需要转换的字段或者表达式,target_data_type表示目标数据类型。以下是一些常见的使用场景示例:

数值类型转换

将字符串类型的数字转换为整数类型:

-- 将字符串'123'转换为整数类型
SELECT CAST('123' AS SIGNED) AS converted_num;
-- 将浮点型转换为整数,会直接截断小数部分
SELECT CAST(123.89 AS SIGNED) AS truncated_num;

日期时间类型转换

将日期时间类型转换为字符串类型:

-- 将当前日期转换为YYYY-MM-DD格式的字符串
SELECT CAST(NOW() AS CHAR) AS date_str;
-- 将日期类型转换为指定格式的字符串(部分数据库支持格式参数)
SELECT CAST(CURDATE() AS CHAR) AS cur_date_str;

字符串类型转换

将整数转换为字符串类型进行拼接:

-- 将用户ID转换为字符串后和前缀拼接
SELECT CONCAT('USER_', CAST(user_id AS CHAR)) AS user_code FROM user_table;

CONVERT函数的基本用法

CONVERT函数的功能与CAST类似,但是语法形式和部分数据库中的扩展功能有所不同,基本语法如下:

-- 通用语法
CONVERT(expression, target_data_type)
-- MySQL等数据库支持的扩展语法,可指定转换格式
CONVERT(expression, target_data_type, format_code)

以下是CONVERT函数的常见使用示例:

基础类型转换

实现和CAST相同的数值转换功能:

-- 将字符串转换为整数
SELECT CONVERT('456', SIGNED) AS converted_num;
-- 将浮点型转换为十进制类型
SELECT CONVERT(78.92, DECIMAL(10,2)) AS decimal_num;

带格式的日期转换

在MySQL中,CONVERT函数支持通过格式码指定日期转换的格式,这是它相比CAST的一大优势:

-- 将当前日期时间转换为YYYY年MM月DD日 HH:MI:SS格式
SELECT CONVERT(NOW(), CHAR, 20) AS formatted_date;
-- 常用格式码:20对应YYYY-MM-DD HH:MI:SS,3对应YYYYMMDD
SELECT CONVERT(CURDATE(), CHAR, 3) AS short_date;

CAST与CONVERT的区别对比

两个函数的核心功能都是实现数据类型转换,但在使用上存在以下差异:

对比维度CAST函数CONVERT函数
语法标准SQL标准语法,兼容性更好,几乎所有关系型数据库都支持非SQL标准语法,不同数据库的实现存在差异,部分扩展功能仅特定数据库支持
格式控制不支持额外格式参数,转换后的格式由数据库默认规则决定部分数据库(如MySQL)支持第三个格式参数,可自定义转换后的输出格式
语法复杂度语法简洁,只有表达式和目标类型两个参数语法相对灵活,可根据数据库支持情况添加扩展参数

使用注意事项

  • 转换时需要确保源数据能够被正确转换为目标类型,比如将包含字母的字符串转换为整数会直接报错。
  • 不同数据库支持的目标数据类型存在差异,使用时需要参考对应数据库的官方文档。
  • 进行日期时间转换时,如果涉及自定义格式,优先选择支持格式参数的CONVERT函数,否则使用CAST即可。
  • 类型转换操作可能会影响查询性能,尤其是大表上的字段转换,尽量避免在WHERE条件中对字段进行类型转换,防止索引失效。

实际应用示例

假设存在一张订单表order_table,其中order_amount是字符串类型存储的金额,create_time是日期时间类型,需要统计2024年5月的订单总金额,并将金额转换为保留两位小数的格式:

-- 使用CAST转换金额类型并求和
SELECT 
    SUM(CAST(order_amount AS DECIMAL(10,2))) AS total_amount
FROM order_table
WHERE CAST(create_time AS DATE) >= '2024-05-01' 
  AND CAST(create_time AS DATE) < '2024-06-01';

-- 使用CONVERT实现相同功能,MySQL环境下可指定日期格式
SELECT 
    SUM(CONVERT(order_amount, DECIMAL(10,2))) AS total_amount
FROM order_table
WHERE CONVERT(create_time, DATE, 3) >= '20240501' 
  AND CONVERT(create_time, DATE, 3) < '20240601';

通过以上示例可以看出,两种函数都可以实现需求,开发者可以根据自己使用的数据库类型和具体场景选择合适的函数。

SQLCAST函数CONVERT函数数据类型转换修改时间:2026-06-14 20:57:15

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。