将 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。在处理该字段之前,您需要使用CASTCONVERT

【讨论】:

【参考方案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 时转换失败

将 varchar 值转换为数据类型 int 时转换失败

将 varchar 值“N”转换为数据类型 smallint 时转换失败

将 varchar 值“Collect_Date”转换为数据类型 int 时转换失败