SQL将字符转换为数字

SQL将字符转换为数字,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我得到这个错误: 转换varchar值“This is a FUTURES item”时,转换失败到数据类型int 演员阵容有什么问题 UPDATE STOCK SET DESC2 = 'This is a FUTURES item. ' + LEFT(DESC1, 4) + 'futures will begin arriving in ' + (CAST(LEFT(DESC1, 4) as INT) + 3) WHERE ISNUMERIC(LEFT(DESC1, 4)) = 1 运算符

我得到这个错误:

转换varchar值“This is a FUTURES item”时,转换失败到数据类型int

演员阵容有什么问题

UPDATE STOCK 
SET DESC2 = 'This is a FUTURES item. ' + LEFT(DESC1, 4) + 'futures will begin arriving in ' + (CAST(LEFT(DESC1, 4) as INT) + 3)
WHERE ISNUMERIC(LEFT(DESC1, 4)) = 1

运算符
+
过载。如果任何操作数是数字,则将其视为加法。根据您想要执行的操作,您需要将值重新转换回字符串:

UPDATE STOCK
    SET DESC2 = 'This is a FUTURES item. ' + LEFT(DESC1, 4) + 'futures will begin arriving in ' + CAST(CAST(LEFT(DESC1, 4) as INT) + 3 as VARCHAR(255))
WHERE ISNUMERIC(LEFT(DESC1, 4)) = 1;
尽管此查询可能会起作用,但(在SQL Server中)无法保证
WHERE
出现在
集合
之前。这意味着您仍然可能会出现类型转换错误。较新版本的解决方案是
尝试转换()
。或者,您可以使用
案例
语句:

UPDATE STOCK
    SET DESC2 = 'This is a FUTURES item. ' + LEFT(DESC1, 4) + 'futures will begin arriving in ' +
                (CASE WHEN ISNUMERIC(LEFT(DESC1, 4)) = 1
                      THEN CAST(CAST(LEFT(DESC1, 4) as INT + 3) as VARCHAR(255))
                 END)
WHERE ISNUMERIC(LEFT(DESC1, 4)) = 1;

@戈登,你可能应该再强调一下不保证的部分。。。