2017-05-05 185 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'不管你想更换一个变量或。

相关问题