SQL将字符转换为数字
我得到这个错误: 转换varchar值“This is a FUTURES item”时,转换失败到数据类型intSQL将字符转换为数字,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 运算符
演员阵容有什么问题
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;
@戈登,你可能应该再强调一下不保证的部分。。。