SQL Server中字符串转数字常用CAST、CONVERT、TRY_CAST及TRY_CONVERT函数,CAST如CAST('123' AS INT),CONVERT支持格式化如CONVERT(INT, '123');TRY_CAST/TRY_CONVERT则增加容错性,转换失败返回NULL而非报错,适合不确定数据格式时使用,需注意字符串需符合数字格式(如不含字母、多余符号),前导空格可自动处理,转整数时截断小数,转DECIMAL可指定精度和小数位,优先选用TRY系列函数,避免异常中断流程,确保数据处理稳定性。
在SQL Server数据库操作中,将字符串类型(如VARCHAR、NVARCHAR、CHAR等)转换为数字类型(如INT、BIGINT、DECIMAL、FLOAT等)是常见的需求,从用户输入、日志文件或外部数据源导入的数据可能以字符串形式存储,但需要进行数值计算、排序或比较时,就需要将其转换为数字类型,本文将详细介绍SQL Server中字符串转数字的常用方法、注意事项及实践技巧。
为什么需要字符串转数字?
在实际业务场景中,字符串转数字的需求主要源于以下几点:
- 数据清洗:导入的文本数据可能包含数字信息(如"123"、"45.67"),需转换为数值类型参与计算。
- 用户输入处理:前端输入的数字(如订单金额、数量)可能以字符串形式提交,需转换为数据库中的数字类型存储。
- 数据比较与排序:字符串形式的数字(如"001"、"010")直接排序会按字符编码进行,转换为数字后才能正确比较大小(如1、10、100)。
字符串转数字的常用方法
SQL Server提供了多种内置函数实现字符串到数字的转换,核心方法包括CAST、CONVERT、TRY_CAST、TRY_CONVERT,以及部分场景下的PARSE函数,下面分别介绍其语法、用法及适用场景。

CAST函数:标准转换,失败则报错
CAST是SQL标准中通用的类型转换函数,可将字符串表达式转换为指定的数字类型。
语法
CAST (表达式 AS 数据类型)
示例
- 将字符串
"123"转换为INT:SELECT CAST('123' AS INT) AS Result; -- 输出:123 - 将字符串
"45.67"转换为DECIMAL(10,2)(10位总长度,2位小数):SELECT CAST('45.67' AS DECIMAL(10,2)) AS Result; -- 输出:45.67 - 将科学计数法字符串
"1.23E+2"转换为FLOAT:SELECT CAST('1.23E+2' AS FLOAT) AS Result; -- 输出:123.0
注意事项
- 转换失败报错:如果字符串包含无法识别的字符(如字母、特殊符号),转换时会报错。
SELECT CAST('12a3' AS INT) AS Result; -- 报错:将varchar数据类型转换为numeric数据类型时出错。 - 空格处理:字符串前后的空格会被自动忽略,但中间的空格会导致转换失败。
SELECT CAST(' 123 ' AS INT) AS Result; -- 输出:123(成功) SELECT CAST('12 3' AS INT) AS Result; -- 报错(中间有空格) - 数据类型范围:转换后的数字类型需在目标类型的范围内,否则报错。
SELECT CAST('99999999999999999999' AS INT) AS Result; -- 报错(超出INT范围)
CONVERT函数:格式化转换,支持样式参数
CONVERT是SQL Server特有的转换函数,功能与CAST类似,但支持额外的样式参数,主要用于日期时间类型的格式化,在数字转换中样式参数较少使用,但语法完全兼容CAST。
语法
CONVERT (数据类型, [表达式], [样式])
- 样式参数:对于数字转换,样式参数通常用于控制字符串的格式(如千分位分隔符),但实际使用中较少涉及,默认为0。
示例
- 基本转换(与
CAST等效):SELECT CONVERT(INT, '456') AS Result; -- 输出:456
- 尝试使用样式参数(数字转换中样式影响有限):
SELECT CONVERT(DECIMAL(10,2), '78.90', 1) AS Result; -- 样式1对数字无影响,输出:78.90
注意事项
- 与
CAST一样,转换失败时会报错,适用于确定字符串
文章版权声明:除非注明,否则均为xmsdn原创文章,转载或复制请以超链接形式并注明出处。

