我需要更新数字的第一位数字。 例如,3003。
我只希望将第一个'3'更改为'2',并且不希望更改最后一个数字'3'。
类似以下错误查询:
update table
set defaulttopicorder = replace(defaulttopicorder, left(defaulttopicorder,1), 2)
where ....
答案 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)
这是一种稍微不同的方法,不涉及将其变成字符串(因此可能更高效,尽管您必须对其进行测试以确定)。
所以,举个例子:
当然,您需要注意舍入错误,这些错误会因representing decimal values as binary问题而意外弹出。