如何仅更新数字的第一个数字?

时间:2009-10-18 01:17:19

标签: sql sql-server tsql

我需要更新数字的第一位数字。 例如,3003。

我只希望将第一个'3'更改为'2',并且不希望更改最后一个数字'3'。

类似以下错误查询:

update table
   set defaulttopicorder = replace(defaulttopicorder, left(defaulttopicorder,1), 2)
 where ....

5 个答案:

答案 0 :(得分:2)

假设defaulttopicorder列是非小数,这将在数字的第一个数字加1:

SET defaulttopicorder = defaulttopicorder + POWER(10, LEN(STR(defaulttopicorder)))

...所以如果你想从第一个数字中减去1:

SET defaulttopicorder = defaulttopicorder + -1 * POWER(10, LEN(STR(defaulttopicorder)))

答案 1 :(得分:1)

使用STR(defaulttopicorder)从数字中创建一个字符串,SUBSTRING将从索引2开始接收它的一部分,+将前导'2'连接到该子字符串。

答案 2 :(得分:0)

这听起来像是家庭作业,所以不是给出答案,而是建议如何。

您可以将数字转换为字符串,然后只修改varchar中的第一个字符,但是,当您增加它时,请记住,如果从9到10,它可能会增加。

另一种方法是有人删除所有其他数字,所以如果你有价值: 3976,然后将它变为3000,然后增加然后再添加你删除的内容。

答案 3 :(得分:0)

这是一种快速不优雅的方法:

DECLARE @MyInt INT = 5003
PRINT CAST(SUBSTRING(CAST(@MyInt AS VARCHAR(4)), 1, 1) + 1 AS CHAR(1)) + SUBSTRING(CAST(@MyInt AS VARCHAR(4)), 2, LEN(@MyInt) - 1)

根据需要转换为更新。在SQL08上测试。

答案 4 :(得分:0)

这是一种稍微不同的方法,不涉及将其变成字符串(因此可能更高效,尽管您必须对其进行测试以确定)。

  • 如果你有一个数字N,那么log 10 (N)就是为了得到N而必须提高10的能力。
  • 但是如果你将它向下舍入并将其提高10(即10 floor(log10(N))),你将获得最左边数字的位置值。
  • 现在,将该地方值乘以您要添加或减去数字的金额(例如-1或1),并将结果添加到原始数字。

所以,举个例子:

  • N = 3003
  • log 10 (N)=约。 3.477
  • floor(3.477)= 3
  • 10 3 = 1000
  • 因此,如果要在第一个数字上加1,请在数字上加1 * 1000(= 1000);如果要减1,请在数字上加上-1 * 1000(= -1000)。

当然,您需要注意舍入错误,这些错误会因representing decimal values as binary问题而意外弹出。