Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL中增加一个varchar_Sql_Sql Server - Fatal编程技术网

在SQL中增加一个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

基本上,我想在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,嗯,你可以这样做:

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