簡體   English   中英

從現有值更新列中使用逗號分隔的值在SQL Server中

[英]from existing value Update column using comma-separated values in SQL Server

從現有值更新列中使用逗號分隔的值在SQL Server中

tbl 
id name rev_code
1  aaa  rev1,rev2,rev3
2  bbb  rev2,rev3
3  ccc  rev1,rev2
4  ddd  rev3,rev2

我想更新rev_code ='rev3'需要添加的結尾,如rev1,rev2,rev3,rev5

期望的輸出

id name rev_code
1  aaa  rev1,rev2,rev3,rev5
2  bbb  rev2,rev3,rev5
3  ccc  rev1,rev2
4  ddd  rev3,rev2,rev5

最好的選擇是規范化數據庫:
刪除該rev_code列,然后將其轉換為新表,並通過外鍵約束將其鏈接到當前表。

如果不可能,則可以執行以下操作:

UPDATE tbl
SET rev_code = rev_code + ',rev5'
WHERE ','+ rev_code + ',' LIKE '%,rev3,%'
AND ','+ rev_code + ',' NOT LIKE '%,rev5,%'

停止將逗號分隔的值存儲在違反“ 第一范式”形式的列中。 考慮更改數據庫設計

在最壞的情況下,請使用此更新獲取結果

UPDATE Yourtable
SET    [rev_code] = [rev_code] + ',rev5'
WHERE  Charindex('rev3', [rev_code]) > 0 

嘗試這個,

UPDATE table1 SET rev_code=rev_code +',rev5' 
where  rev_code like '%rev3%' and Charindex('rev5', [rev_code])= 0 

編輯:

 UPDATE table1 SET rev_code= rev_code +',rev5' 
 where rev_code  IS NOT NULL and rev_code like '%rev3%' and Charindex('rev5', [rev_code])= 0

檢查rev_code列大小。

正如@Zohar Peled所說,在存儲用逗號分隔的值時,這是一個壞主意。

將分隔列表存儲在數據庫列中真的不好嗎?

試試這個,這將rev5為rev_code如果有rev3rev5已經不存在。

UPDATE tbl 
SET    rev_code = rev_code + ',rev5'
WHERE  rev_code NOT LIKE '%rev5%' AND rev_code LIKE '%rev3%'

糟糕...您的數據庫設計有誤,因此我將首先建議創建一個額外的一對多表,您將在其中存儲字段: rev_code

然后在該表中找到所有具有特定rev_code值的記錄,並將新記錄添加到滿足條件的記錄中。

如果您不能更改數據庫結構,則必須使用“ WHERE rev_code like'%rev3%'”(這將非常慢)或全文搜索(這是一個過大的殺傷力)

怎么樣:

UPDATE table 
SET rev_code = rev_code+',rev5' 
WHERE rev_code LIKE '%rev3%' (OR RIGHT(rev_code,4) = 'rev3')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM