我有一些这样的更新语句:
UPDATE tmp
SET MyVarCharColumn1 = ISNULL(SomeOtherVarCharColumn,0)
FROM #myTempTable tmp;
请注意,MyVarCharColumn1
的类型为VarChar()
,但在现实生活中,它只会具有类似数字的值。
现在,我想将其更改为 ADD ,将整数值 10 更改为最终值MyVarCharColumn1
,然后再次将其转换为{ {1}}。
例如,如果当前当前为“ 23” ,我希望它为“ 33” 。
在该更新语句中还可以处理空字符串的安全方法是什么?
答案 0 :(得分:2)
如果确实是数字,则可以执行以下操作:
UPDATE tmp
SET MyVarCharColumn1 = MyVarCharColumn1 + 10
FROM #myTempTable tmp;
如果您已经在另一列中设置了值:
UPDATE tmp
SET MyVarCharColumn1 = COALESCE(SomeOtherVarCharColumn, 0) + 10
FROM #myTempTable tmp;
SQL Server将把+
解释为加号,而不是字符串连接。然后它将第一个参数转换为数字并进行加法运算。它将另存为字符串,因为那是列的类型。
我建议这样做,因为您不应该混用这样的类型。更好的方法是将列转换为适当的数字,例如:
alter table tmp alter column MyVarCharColumn1 numeric(10, 0);
答案 1 :(得分:1)
尝试使用以下代码更新设置行以将其增加10
UPDATE tmp
SET MyVarCharColumn1 = ISNULL(SomeOtherVarCharColumn,0)
SET MyVarCharColumn1 = MyVarCharColumn1 + 10
FROM #myTempTable tmp;
这会将MyVarCharColumn1列中的每个单元格增加10,如果要添加特殊条件,可以使用WHERE
编辑2:
我现在添加了ISNULL,所以我现在代码将首先在行中查看它的数字,否则将其设置为0,如果它是数字,则不会将其设置为零并将移至下一个线增加了10
答案 2 :(得分:1)
为什么不确切表达您想要什么?
update a
set a.Col1 = Convert(varchar, (Convert(int, IsNull(NullIf(a.Col1, ''), '0')) + 10))
from #myTempTable a;
分为几步:
a.Col1
NullIf(<value>, '')
IsNull(<value>, '0')
Convert(int, <value>)
(<value> + 10)
Convert(varchar, <value>)