2026-10-21 17:43:33
CAST 函数是 SQL 中用于显式转换数据类型的标准工具,其基本语法为 CAST(expression AS target_type),支持字符串、数字、日期等常见类型的转换,但需注意数据库兼容性和性能优化问题。
一、基本语法与核心作用语法结构:
CAST(expression AS target_type)expression:待转换的值或列名(如字符串、数字、日期等)。
target_type:目标数据类型(如 INT、DATE、VARCHAR 等)。
核心作用:显式将数据从一种类型转换为另一种,例如字符串转数字、日期转字符串等,确保数据符合后续操作(如计算、拼接、存储)的要求。
若字符串含非数字字符(如 '100元'),转换会报错。
预处理建议:使用 TRIM()、正则表达式或条件判断过滤无效字符。-- 示例:仅转换纯数字字符串CASE WHEN str_column ~ '^[0-9]+$' THEN CAST(str_column AS INT) END
不同数据库对日期格式要求不同(如 MySQL 支持 YYYY-MM-DD,Oracle 可能需 TO_DATE 指定格式)。
建议:查阅目标数据库文档,或使用数据库特定函数(如 Oracle 的 TO_DATE('20230101', 'YYYYMMDD'))。
不同数据库的字符串类型名称可能不同(如 VARCHAR、CHAR、TEXT)。
替代方案:部分数据库支持直接拼接(如 PostgreSQL 的 '订单编号:' || order_id::TEXT)。
不同数据库对 CAST 的实现存在差异,部分提供替代函数或操作符:
支持 CAST(),也支持 CONVERT(expression, type)(与 CAST 功能相同)。
示例:CONVERT('100', SIGNED INTEGER) -- 字符串转整数
支持 CAST() 和 CONVERT(),后者可指定日期格式。
示例:CONVERT(DATE, '20230101', 112) -- 格式代码 112 对应 YYYYMMDD
推荐使用 TO_CHAR、TO_DATE 等专用函数。
示例:TO_NUMBER('100') -- 字符串转数字TO_DATE('20230101', 'YYYYMMDD') -- 字符串转日期
支持 CAST(),也支持 :: 操作符快速转换。
示例:'2023-01-01'::DATE -- 字符串转日期100::VARCHAR -- 数字转字符串
条件判断:转换前检查数据有效性。CASE WHEN ISNUMERIC(str_column) = 1 THEN CAST(str_column AS INT) END
使用安全函数:如 SQL Server 的 TRY_CAST(),转换失败返回 NULL 而非报错。TRY_CAST(str_column AS INT) -- 失败时返回 NULL
原因:对 order_date 列转换后,数据库无法利用该列的索引。
反向转换:将常量转为目标类型,而非对列转换。SELECT * FROM orders WHERE order_date = CAST('2023-01-01' AS DATETIME);
调整设计:若频繁需要类型转换,考虑修改表结构,直接存储正确类型的数据。
转换前验证数据有效性,避免报错。
关注数据库兼容性,必要时使用特定函数(如 Oracle 的 TO_DATE)。
在性能敏感场景中,避免对字段直接使用 CAST,优先反向转换或优化表设计。
通过合理使用 CAST 及其变体,可以高效解决 SQL 查询中的类型转换问题,同时兼顾兼容性与性能。