将 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
存储为MONEY
或DECIMAL
,您的初始查询将毫无问题地运行。
【讨论】:
【参考方案2】:一种选择是使用cast
或convert
:
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 时转换失败