在SQL中增加一个varchar
基本上,我想在SQL中增加一个varchar,其值为“ABC001” 我有一段代码可以在int中添加一个,但我不知道如何让它在varchar中工作:在SQL中增加一个varchar,sql,sql-server,Sql,Sql Server,基本上,我想在SQL中增加一个varchar,其值为“ABC001” 我有一段代码可以在int中添加一个,但我不知道如何让它在varchar中工作: SELECT NXT_NO FROM TABLE UPDATE TABLE SET NXT_NO = NXT_NO + 1 如果NXT_NO是一个varchar,是否有一种简单的方法来增加 我想: ABC001 ABC002 ABC003 及 它还需要与以下方面合作: 001,A0001,AB00001,嗯,你可以这样做: up
SELECT
NXT_NO
FROM
TABLE
UPDATE
TABLE
SET
NXT_NO = NXT_NO + 1
如果NXT_NO是一个varchar,是否有一种简单的方法来增加
我想:
ABC001
ABC002
ABC003
及
它还需要与以下方面合作:
001,A0001,AB00001,嗯,你可以这样做:
update table
set nxt_no = left(next_no, 3) +
right('0000000' + cast(substring(next_no, 4, 100)+1 as varchar(255)), 4)
在我看来有点野蛮
顺便说一下,您可以使用标识列来自动递增ID。如果您想在前面放一个固定前缀,可以使用计算列。或者听从波希米亚人的建议,将前缀和数字存储在不同的列中。好吧,你可以这样做:
update table
set nxt_no = left(next_no, 3) +
right('0000000' + cast(substring(next_no, 4, 100)+1 as varchar(255)), 4)
update
[table]
set [nxt_no] = case when PATINDEX('%[0-9]%', [nxt_no]) > 0 then
left([nxt_no], PATINDEX('%[0-9]%', [nxt_no])-1) -- Text part
+ -- concat
right( REPLICATE('0', LEN([nxt_no]) - PATINDEX('%[0-9]%', [nxt_no])+1) + convert( varchar, convert(int, right([nxt_no], LEN([nxt_no]) - PATINDEX('%[0-9]%', [nxt_no])+1))+1), LEN([nxt_no]) - PATINDEX('%[0-9]%', [nxt_no])+1)
else
[nxt_no] end
在我看来有点野蛮
顺便说一下,您可以使用标识列来自动递增ID。如果您想在前面放一个固定前缀,可以使用计算列。或者接受波希米亚人的建议,将前缀和数字存储在不同的列中。如果有两列,你的生活会更轻松;一个用于ABC,一个用于数字部分。加入它们是一个渲染问题,但您已经将其隐藏到数据库中。那是个错误。问题是那不是我的桌子。我只是简单地从中提取数据,但每当我得到NXT_NO时,我必须向其中添加一个。否则,表格将变得杂乱无章,随着时间的推移会导致许多问题;一个用于ABC,一个用于数字部分。加入它们是一个渲染问题,但您已经将其隐藏到数据库中。那是个错误。问题是那不是我的桌子。我只是简单地从中提取数据,但每当我得到NXT_NO时,我必须向其中添加一个。否则,表格将变得杂乱无章,随着时间的推移会造成许多问题。我感谢您的回复。问题是我从来不知道NXT_NO中的字符是什么。我只知道他们可能是开头的一些字母。例如,NXT_NO的格式可以是“1001”、“A1001”、“ABC1001”。我需要能处理所有案件的东西。我感谢你的回复。问题是我从来不知道NXT_NO中的字符是什么。我只知道他们可能是开头的一些字母。例如,NXT_NO的格式可以是“1001”、“A1001”、“ABC1001”。我需要能处理所有案件的东西。我感谢你的回复。NXT\u编号的格式可能为“1001”、“A1001”、“ABC1001”。我需要能处理所有情况的东西。顺便说一句,如果你想用4个字符的数字,你必须用4替换所有3个,用0000替换“000”。这都很有帮助,谢谢。但是,我保证这是最后一件事,它也需要对数量可变的数字起作用A10003,“ABC12”我感谢您的回复。NXT\u编号的格式可能为“1001”、“A1001”、“ABC1001”。我需要能处理所有情况的东西。顺便说一句,如果你想用4个字符的数字,你必须用4替换所有3个,用0000替换“000”。这都很有帮助,谢谢。但是,我保证这是最后一件事,它也需要对数量可变的数字起作用A10003','ABC12'
update
[table]
set [nxt_no] = case when PATINDEX('%[0-9]%', [nxt_no]) > 0 then
left([nxt_no], PATINDEX('%[0-9]%', [nxt_no])-1) -- Text part
+ -- concat
right( REPLICATE('0', LEN([nxt_no]) - PATINDEX('%[0-9]%', [nxt_no])+1) + convert( varchar, convert(int, right([nxt_no], LEN([nxt_no]) - PATINDEX('%[0-9]%', [nxt_no])+1))+1), LEN([nxt_no]) - PATINDEX('%[0-9]%', [nxt_no])+1)
else
[nxt_no] end