【发布时间】:2020-04-02 17:19:10
【问题描述】:
当我像这样写查询时
Select 3 + '44. 5'
将 varchar 值转换为 '44 时出现错误转换失败。 6' 转数据类型 int
为什么它不能返回正确的错误,因为小数不能转换为 int。
【问题讨论】:
-
用单引号将数字括起来
''使其成为字符串,而不是数字。 -
数据类型优先级
Select 3 + '44. 5'=> 转换为 INT,select 3.0 + '44. 5'=> 转换为数字。 '44. 5' 是无效的 INT/数字文字 -
因为这不是正确的错误。
SELECT 3 + 44.5可以正常工作,因为INT可以提升为DECIMAL。SELECT 3.0 + '44. 5'将给出关于VARCHAR未转换为NUMERIC的错误。在任何情况下保存溢出都不会在将DECIMAL转换为INT时出错,因为允许这种转换(隐式舍入)。 -
^ 如果它是一个有效的数字文字
44.5,您仍然会收到“将 varchar 转换为数字数据类型的算术溢出错误”,因为3.0会将表达式类型设置为numeric(2,1)和 44.5 是numeric(3,1)。
标签: sql-server tsql casting string-concatenation