[英]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如果有rev3
和rev5
已經不存在。
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.