2017-05-05 188 views
0

我是SQL初學者。目前,我正在使用具有兩列的SQL數據庫。第一列指定了id。第二列指定由分隔符「@ d @」分隔的人員列表所以,該列看起來像「John @ d @ Jack @ d @ Prince」如何從SQL行的列中刪除特定值?

我需要從此列表中刪除特定名稱。假設,我正在刪除列表中的王子。刪除操作後,我希望我的行看起來像John @ d @ Jack。我正在研究這個程序的解決方案,我找到了一些資源。我瞭解了這種方法「UPDATE TABLE SET columnName = null WHERE YourCondition」因此,我可以將整列更改爲空,但我不知道如何保留字符串並只刪除指定的值。

+1

修復您的數據結構。以分隔字符串存儲名稱列表並不是存儲多個值的SQLish方式。如果你正在學習SQL,那麼從SQL的角度來看,做正確的事情就更加重要。 –

+0

我實際上在工作。這是一個非常大的數據庫,它是這樣構建的。因此,我沒有太多自由 – WOW

+0

有人在使用分隔符時發出了非常糟糕的呼叫。在我看來,我已經看到了一些瘋狂的分隔符,但那是一個故意令人討厭的分隔符。對不起,你被拋到了一個很傷心的項目上。雖然這是一個很好的學習經歷。希望你永遠不要在你職業生涯中的其他人身上造成這樣的事情。 – tadman

回答

0

可以使用替換功能

update yourTable set yourField = replace(replace(yourField, 'Prince', ''), '@@' , '@') where yourCondition; 

首先替換「刪除」你想的名字,第二替換「刪除」刪除名字的分隔符。

0

如果我沒有記錯,你正在尋找的命令

UPDATE TABLE set columnName = "[email protected]@Jack" WHERE YourCondition 

或者你想要一個更通用的方法?

+0

我需要更一般的方法,因爲我不知道行中已經存在的內容。我有一個變量,它保存了我想要從此列中刪除的值。因此,我有var變量=王子。我想運行一個SQL查詢,以使新列看起來像John @ d @ Jack。但是,我不知道列中已經存在的是什麼,但可以保證變量將出現在列表中 – WOW

+0

然後Fran Cerezo的方法是正確的 –

0

可以使用這樣做:

update t 
    set list = trim(both '@' from replace(concat('@', list, '@'), concat('@', 'prince', '@'), '@')) 
    where concat('@', list, '@') like concat('%@', 'prince', '@%'); 

您可以替換'prince'不管你想更換一個變量或。

相關問題