news 2026/4/16 11:57:39

SQL数据类型转换:CAST详解及实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SQL数据类型转换:CAST详解及实践

前言

在 SQL 数据处理中,数据类型转换是常见需求,尤其在跨系统数据交互时。在SQL的世界里,数据类型转换是一个基础且关键的操作,它贯穿于数据库开发、管理与数据分析的各个环节,深刻理解它们对于编写高效、稳定的SQL代码至关重要。

一、概述

1.1 CAST 函数是什么

在实际操作中,我们常常需要在不同数据类型之间进行转换。比如,当我们从用户处获取数据时,用户输入的数据可能是字符串类型,但在数据库中存储时,可能需要转换为对应的数值类型或日期类型。又或者在进行数据查询和分析时,为了满足特定的业务逻辑和计算需求,也需要对数据类型进行转换。例如,在统计销售数据时,销售金额可能存储为字符串格式,但在进行求和或平均值计算时,就需要将其转换为数值类型。

在数据处理的战场上,CAST 函数堪称是数据类型转换的[瑞士军刀]。作为 SQL 标准函数,用于将一个数据类型的值转换为另一个类型,它既能解决数值与字符的“跨界矛盾”,也能化解日期格式的“时空错乱”。这在处理不同类型的数据时非常有用,比如将字符串转换为数字,或者将浮点数转换为整数等。

1.2 CAST 函数的基本语法

CAST 函数的基本语法是这样的:

sql

CAST(expression AS data_type)

参数

简要说明

expression

要转换的原始表达式

AS

用于分隔两个参数,在AS之前的是要处理的数据,在AS之后是要转换的数据类型。

data_type

要转换成的数据类型。数据库不同,支持的数据类型不同,使用时需注意。

类型

简要说明

格式

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

SIGNED

将 value 转化为 SIGNED (有符号的 64 位整数)

UNSIGNED

将 value 转化为 UNSIGNED (无符号 64 位整数)

BINARY

将 value 转化为 BINARY (二进制字符串)

DOUBLE

将 value 转化为 DOUBLE 类型

FLOAT

将 value 转化为 FLOAT 类型

举个简单的例子,如果有一个字符串 '2026-01-23',想把它转成日期类型,就可以这样写:

sql

SELECT CAST('2023-01-01' AS DATE)

这在处理原始数据不是标准格式时特别有用,比如从文本文件导入数据后,需要把某些字段转换成数值或者日期类型。它简单直接,但在使用过程中也有一些细节需要注意,特别是不同类型之间的转换规则。如果转换失败(比如把 ABC 转成整数),大多数数据库会报错,所以使用前最好确认数据是可以安全转换的。

二、CAST 的实战场景

CAST 函数在 SQL 中有广泛的应用场景,主要包括以下几个方法:

2.1 数据类型转换

CAST 函数最常见的用法就是进行数据类型的转换,例如,我们有一个字符串类型的字段,但需要将其转换为数字类型进行计算,这就可以用 CAST 函数来实现:

sql

# 字符串转整数 SELECT CAST('123' AS SIGNED); # 字符串转浮点型数字 SELECT CAST('123.456' AS FLOAT);

2.2 字符串转换

除了数据类型的转换,CAST 函数还可以用于字符串的转换:

sql

# 将当前时间转换成字符串类型 SELECT CAST(NOW() AS CHAR); # 整数转字符串 SELECT CAST(123 AS CHAR); # 浮点数转字符串 SELECT CAST(123.456 AS CHAR);

在进行字符串转换时,需要注意目标数据类型的长度限制。如果转换后的字符串长度超过了目标数据类型的长度限制,可能会导致截断错误。在这种情况下,可以使用LEFT函数来截取指定长度的子字符串。

sql

SELECT LEFT(CAST('He1lo,World' AS CHAR(5)), 5);

使用CAST函数时需要注意,不同数据库对数据类型的写法略有差异。例如,MySQL中用CHAR或VARCHAR,而SQL Server中常用NVARCHAR。

2.3 日期时间转换

在 SQL 中,日期的格式有很多种,有时候需要将日期转换为特定的格式,这时候可以尝试转换为 DATE、TIME、DATETIME 类型。CAST 函数可以用于日期的转换,以满足业务需求。例如我们有一个日期类型的字段,但需要将其转换为另一种日期格式,这就可以用 CAST 函数来实现:

sql

# 将值转换为TIME数据类型 SELECT CAST(NOW() AS time); SELECT CAST('2026-01-25' AS time); SELECT CAST('2026-01-25 10:30:00' AS time); # 将值转换为DATE数据类型 SELECT CAST(NOW() AS date); SELECT CAST('2026-01-25' AS date); SELECT CAST('2026-01-25 10:30:00' AS date); # 将值转换为DATETIME数据类型 SELECT CAST(NOW() AS datetime); SELECT CAST('2026-01-25' AS datetime); SELECT CAST('2026-01-25 10:30:00' AS datetime);

2.4 数值与字符的“变形记”

sql

-- 字符串转整数 SELECT CAST('123' AS INTEGER) AS string_to_int; -- 字符串转小数(指定精度) SELECT CAST('123.45' AS DECIMAL(5,2)) AS string_to_decimal; -- 科学计数法字符串转浮点 SELECT CAST('1.23E+5' AS FLOAT) AS scientific_to_float; -- 带货币符号字符串转数值(需数据库支持) SELECT CAST('$123.45' AS DECIMAL(10,2)) AS currency_to_decimal;

在 SQL 中,当需要对存储为字符串类型的数值字段进行排序时,直接使用 ORDER BY 会导致字典序排序而非数值排序。

sql

SELECT CAST(123.456 AS DECIMAL(10, 2));

有时候我们会从日志或者其他系统中拿到类似 '100' 这样的字符串,但实际想要做加减乘除操作,这时候就需要转换成数字类型:

sql

SELECT CAST('100' AS SIGNED)

如果字符串里有非数字字符,比如 '100元',那就会出错。所以在转换之前可以用一些函数预处理,比如 TRIM() 或者正则表达式过滤掉非数字部分。

三、避坑指南

3.1 空字符陷阱

不同数据库对 CAST 函数的处理各有差异,例如 CAST('' AS DATE),MySQL 会直接报错,PostgreSQL 返回无效日期错误,Oracle 则会抛出异常。建议先用 CASE WHEN 过滤空值,或者结合COALESCE(NULLIF(column,''), '默认值')处理。

3.2 精度丢失

将 DECIMAL 转 INT 会直接截断小数,需预先用ROUND() 或者 CEILING()处理更安全。

四、总结

CAST 函数在数据处理和转换中非常有用,尤其是在数据导入和报告生成时,可以确保数据类型的正确性和一致性

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 11:50:47

【BUG】【Python】清除字符串空格问题

BUG strip()后依旧有空格DEBUG strip()只清除字符串前后的包括空格、制表符、换行符等),中间的不处理。这时使用replace即可

作者头像 李华
网站建设 2026/4/2 4:39:54

五大智能建站工具真实测评:不画饼,真能上线那种

最近在搞一个支付平台的项目,我前端水平一般,实在不想花几周去啃UI框架。干脆试了一圈AI建站工具,结果还真发现了几个能打的——不光能生成页面,连后台逻辑、数据对接都能搞定,几分钟就能搭出能跑起来的应用。 下面这…

作者头像 李华
网站建设 2026/4/11 22:47:56

人群仿真软件:Vadere_(6).Vadere中的障碍物设置

障碍物设置 在人群仿真软件Vadere中,障碍物的设置对于模拟真实环境中的各种情况至关重要。障碍物可以是墙壁、柱子、家具等,这些障碍物会影响行人的行走路径和行为。本节将详细介绍如何在Vadere中设置障碍物,包括障碍物的定义、添加、编辑和…

作者头像 李华
网站建设 2026/4/13 9:21:44

免费工艺流程模板下载_在线编辑建筑/汽车/物流工艺流程图图表

良功绘图网站 (https://www.lghuitu.com ) 在建筑、汽车、物流等行业的日常运营与项目推进中,工艺流程可视化是提升效率、规范管理的核心手段。无论是建筑工程的施工管控、汽车制造的生产线优化,还是物流行业的仓储配送调度,一份清晰、规范的…

作者头像 李华
网站建设 2026/4/13 12:07:53

AI金融风控:智能反欺诈与个性化理财

一、AI金融风控的核心价值与行业背景 随着数字金融的快速迭代,金融欺诈手段呈现智能化、隐蔽化、团伙化趋势,传统风控模式面临严峻挑战。2023年某电商平台披露数据显示,全年因恶意刷单、账号盗刷等造成的损失超2.3亿元,某银行信用…

作者头像 李华