将 varchar 值“1.33”转换为数据类型 int 时出现问题
Posted
技术标签:
【中文标题】将 varchar 值“1.33”转换为数据类型 int 时出现问题【英文标题】:Problem in converting the varchar value '1.33' to data type int 【发布时间】:2010-12-29 18:12:15 【问题描述】:我有 5 个 case 语句(仅显示 2 个 case 语句)。
SELECT DISTINCT
CASE [GRADE1]
when 1 then 1
when 2 then 3
when 3 then 5
when 4 then 7
when 5 then 9
End as Q1,
CASE [GRADE2]
when 1 then 1
when 2.3 then 3
when 3.33 then 5
when 4.67 then 7
when 1 then 9
End as Q2
FROM abcd
这里我试图将值放在临时表中,我需要在以后的选择语法中映射
SELECT a,b
INTO #Temp_Q
FROM xyz
WHERE [ds]= 'Data'
select distinct t.[b] as [Q]
from abcd s
left join #Temp_Q t on s.[GRADE1] = t.[a]
s.[GRADE2] = T.[a]
我被要求编写代码,而不是对所有这些值进行硬编码。
现在我收到错误.. 而且不知道如何转换。 [GRADE2] (FLOAT,NULL) 是列中分配的数据类型。
消息 245,第 16 级,状态 1,第 14 行 将 varchar 值“1.33”转换为数据类型 int 时转换失败。
【问题讨论】:
表xyz和表abcd的数据类型是什么?您需要在原始表或查询中将所有数据类型转换为十进制。顺便说一句,永远不要将浮点数用于您打算进行计算的事情,它会产生舍入错误。 【参考方案1】:1.33 不是整数,它是DECIMAL
。小数点和小数点后有数字,所以不能表示为整数,即1、2、3、4。在处理该字段之前,您需要使用CAST
或CONVERT
。
【讨论】:
【参考方案2】:试试 SELECT CAST(a AS INT) 或 SELECT CONVERT(INT, a),让我知道它对你有用。
【讨论】:
【参考方案3】:@JNK 是正确的。但是,我会将临时表中的数据类型更改为十进制。经验法则是在处理的所有阶段保持数据类型一致。由于“1.01”是十进制的,所以在存储中也要保持十进制。
【讨论】:
以上是关于将 varchar 值“1.33”转换为数据类型 int 时出现问题的主要内容,如果未能解决你的问题,请参考以下文章
将 varchar 数据类型转换为 datetime 数据类型导致值超出范围的问题
将varchar值'N'转换为数据类型smallint时,转换失败。
将 varchar 值“AND ID =”转换为数据类型 int 时转换失败