我有一個表 content_history 有一列 doc_filename,每一行都有一個字串值。每個字串都有一個 | 和前面的部分 | 是一個檔案路徑。如果它不匹配,我想用正確的檔案路徑替換字串的那部分。這樣做的最佳方法是什么?目前我使用:
UPDATE content_history
SET doc_filename = replace (doc_filename, 'path that needs to be replaced', 'new path')
WHERE doc_filename LIKE 'old path%'
但是如果我沒有確切的路徑,它就不會替換,所以我必須運行一個 select * 查詢并手動檢查并輸入所有不正確的不同路徑。這不是一個可行的長期解決方案
uj5u.com熱心網友回復:
理想情況下,您不會將多個值存盤為單個值中的分隔值,您應該為每個不同的值設定一個單獨的列,然后您就不會問這樣的問題。
您可以使用stuff:
set doc_filename=Stuff(doc_filename, 1, CharIndex('|', doc_filename)-1, 'new path')
uj5u.com熱心網友回復:
您需要拆分值以避免不正確的更新
update CH
set CH.doc_filename = 'new_path' '|' P.right_part
from content_history CH
outer apply
(
select left(CH.doc_filename, charindex('|', CH.doc_filename) - 1) as left_part
,right(CH.doc_filename, len(CH.doc_filename) - charindex('|', CH.doc_filename)) as right_part
where charindex('|', CH.doc_filename) != 0
) P
where P.left_part = 'old_path'
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/353028.html
標籤:sql sql-server
上一篇:更新多列/行case陳述句SQL
