Tsql 当VARCHAR包含小数时,您可以';我不能把它转换成整数——为什么?
我在尝试将varchar强制转换为int时遇到了一个SQL代码问题。下面是一个Transact-SQL代码段,演示了该问题Tsql 当VARCHAR包含小数时,您可以';我不能把它转换成整数——为什么?,tsql,sql-server-2008-r2,Tsql,Sql Server 2008 R2,我在尝试将varchar强制转换为int时遇到了一个SQL代码问题。下面是一个Transact-SQL代码段,演示了该问题 declare @code varchar(100), @retCode smallint, @intCode int select @retCode = 0, @code = '1.0000 ' select @intCode = convert(int, LTR
declare @code varchar(100),
@retCode smallint,
@intCode int
select @retCode = 0, @code = '1.0000 '
select @intCode = convert(int, LTRIM(RTRIM(@code)))
您将得到以下错误:
Msg 245,第16级,状态1,第9行将varchar值“1.0000”转换为数据类型int时,转换失败 显然,
convert
(和cast
)无法将varchar
十进制值直接转换为int
我不得不这样做来纠正它
declare @code varchar(100),
@retCode smallint,
@intCode decimal
select @retCode = 0, @code = '1.0000 '
select @intCode = convert(int, (convert(decimal, LTRIM(RTRIM(@code)))))
select @intCode
那么,为什么上面的更正有效--varchar->decimal->int
?为什么我不能直接从varchar
转换到int
,而不管它的数值是多少?我想了解这背后的原因。(忽略上面的LTRIM/RTRIM…这是不必要的)
顺便说一下,我使用的是SQLServer2008R2
多谢 基本上,SQL Server不确定您正在尝试哪种类型的转换 通过直接指定变量,可以隐式转换为int:
SET @intcode = @Code -- This will Truncate the decimal portion of the number
或者,您可以使用以下命令在SQL Server 2008中执行显式转换:
像这样:
select @intCode = convert( int, try_convert( decimal, @code ) )
不管怎样,您都没有进行字符串操作
下面是一个关于简单谈话中隐式与显式转换的很好的解释:
干杯 如果所述代码是在如下逻辑的情况下工作的:--SNIP SNIP--where(code_type='AGE'和AGE>=CASE WHEN dbo.fnIsNumeric(beging_cd)=1,然后转换(int,(convert(decimal,beging_cd)))else 0 end and age在使用CASE语句时,我使用try_convert而不是convert。这是一个替换中的下降…小数位数不重要。我们希望将其删除(只需一个int即可)。