将字符串转换为整数,然后转换回字符串

时间:2019-08-21 19:10:04

标签: sql tsql sql-server-2012

我有一些这样的更新语句:

UPDATE tmp
    SET MyVarCharColumn1 = ISNULL(SomeOtherVarCharColumn,0)
FROM #myTempTable tmp;

请注意MyVarCharColumn1的类型为VarChar(),但在现实生活中,它只会具有类似数字的值。

现在,我想将其更改为 ADD ,将整数值 10 更改为最终值MyVarCharColumn1,然后再次将其转换为{ {1}}。

例如,如果当前当前为“ 23” ,我希望它为“ 33”

在该更新语句中还可以处理空字符串的安全方法是什么?

3 个答案:

答案 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;

分为几步:

  1. 选择值a.Col1
  2. 将空字符串转换为null NullIf(<value>, '')
  3. 将null转换为零字符串IsNull(<value>, '0')
  4. 将值转换为int Convert(int, <value>)
  5. 将10加到值(<value> + 10)
  6. 将值转换为字符串Convert(varchar, <value>)
相关问题