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

Posted

技术标签:

【中文标题】将 varchar 值“19500.00”转换为数据类型 int 时转换失败【英文标题】:conversion failed when converting the varchar value '19500.00' to data type int 【发布时间】:2015-12-08 20:08:17 【问题描述】:

我还是个 sql 新手,希望得到一些帮助 尝试运行此查询

UPDATE EMPLOYEES
   SET SALARY = SALARY+3500
   WHERE SALARY < 33500;

在下表中

FIRSTNAME   LASTNAME        TITLE      AGE  SALARY
JONIE       WEBER-WILLIAMS  SECRETERY   28  19500.00

不断收到“将 varchar 值 '19500.00' 转换为数据类型 int 时转换失败”

为什么我会得到这个?

【问题讨论】:

你的列SALARY的数据类型是什么? @Nivas 根据标题/错误看起来像是 varchar @DigitalChris 是的,OP 可能需要CONVERT 修复数据结构,以便使用数字类型而不是字符串来存储数字。 【参考方案1】:

问题是您试图对字符串执行数学和数字比较。您可以通过 sgeddes 提到的一系列强制转换/转换来解决此问题,但最终您应该修复您的表以使用正确的数据类型。将数字/日期存储为字符串会导致很多变通办法,这些变通办法会损害性能并为简单查询增加大量代码开销。将salary 存储为MONEYDECIMAL,您的初始查询将毫无问题地运行。

【讨论】:

【参考方案2】:

一种选择是使用castconvert

UPDATE EMPLOYEES 
SET SALARY=cast(SALARY as decimal(10,2))+3500 
WHERE cast(SALARY as decimal(10,2)) < 33500
SQL Fiddle Demo

【讨论】:

以上是关于将 varchar 值“19500.00”转换为数据类型 int 时转换失败的主要内容,如果未能解决你的问题,请参考以下文章

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

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

如何将 varchar 列值转换为 int?

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

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

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