2013-02-19 33 views
1

基本上,我想在SQL中增加一個varchar,其值爲「ABC001」。增加SQL中的varchar

我有代碼,增加了一個爲int,但我不知道如何得到它的工作爲VARCHAR:

SELECT 
    NXT_NO 
FROM 
    TABLE 

UPDATE 
    TABLE 
SET 
    NXT_NO = NXT_NO + 1 

有沒有一種簡單的方法來增加如果NXT_NO是一個varchar?

我想:

ABC001 ABC002 ABC003

它還需要一起工作:

001,A0001,AB00001

+1

如果你有兩列,你的生活會更容易;一個用於ABC,另一個用於數字部分。加入他們是一個渲染問題,但你已經將它埋入數據庫中。這是一個錯誤。 – Bohemian 2013-02-19 20:37:11

+0

問題在於它不是我的桌子。我只是從中提取數據,但每當我收到NXT_NO時,我都必須添加一個。否則,表格會變得無組織,隨着時間的推移會引發許多問題。 – 2013-02-19 20:38:58

回答

2
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 
+0

我很欣賞這種迴應。 NXT_NO的格式可以是'1001','A1001','ABC1001'。我需要能夠處理所有情況的東西。 – 2013-02-19 20:50:12

+0

好的,順便編輯代碼,以便與任何字母 – 2013-02-19 20:51:35

+0

的變體一起工作,如果你想使用4個字符的數字,你必須用全部3代替4,用「000」代替「000」 – 2013-02-19 20:53:22

3

嗯,你可以做像這樣:

update table 
    set nxt_no = left(next_no, 3) + 
        right('0000000' + cast(substring(next_no, 4, 100)+1 as varchar(255)), 4) 

在我看來有點蠻橫的力量。

順便說一下,您可以使用標識列來自動增加ID。如果你想在前面加一個固定的前綴,你可以使用計算列。或者採取波希米亞的建議,並將前綴和數字存儲在不同的列中。

+0

我很欣賞這種迴應。問題是我永遠不知道NXT_NO中的字符是什麼。我只知道他們在開始時可能有些字母。例如,NXT_NO的格式可以是'1001','A1001','ABC1001'。我需要能夠處理所有情況的東西。 – 2013-02-19 20:45:10