从SQL的多行中存在的列中删除一个值

时间:2018-10-04 10:16:11

标签: sql

我有一个表,该表具有一列,可以说通道ID具有-AB,ABC,ABCD,ABDHC等值。现在我需要删除通道ID-AB

如何实现?

2 个答案:

答案 0 :(得分:0)

这是一个可以执行此操作的查询(TSQL):

UPDATE [YourTable]
SET [channel id] = SUBSTRING([channel id], 0, CHARINDEX('AB', [channel id]))
+ SUBSTRING([channel id], CHARINDEX('AB', [channel id]) + LEN('AB'), LEN([channel id]))
WHERE [channel id] LIKE '%AB%'

这会将XXXXABYYYY设置为XXXXYYYY。

如果您提供了一套准确的信息,包括您所拥有的,想要的以及使用的语言,那么我们将更容易为您提供帮助。

答案 1 :(得分:0)

您是说桌子看起来像这样吗?

  channel_table:
  ------------
  id |channel_id|  
  ------------
  1  |AB, ABC, ABCD, ABDHC|
  2  |XYZ, ZY|

如果您已在SQL表中将值另存为CSV,那么我希望使用客户端语言进行数学运算,以获取此数据。我的意思是,首先检测所有具有“ AB”的行,如下所示:

select id,channel_id from channel_table where channel_id like '%AB%';

上面的查询将返回所有带有正则表达式的channel_id,例如 AB 。现在将所有这些存储到一个数组中,遍历每个数组,用逗号分隔字符串,如果找到确切的“ AB”,则将其从数组中删除。请注意,您甚至必须维护一个“ id”列,以便您可以更新表。

在此过程之后,您可能将数组设置为:

id数组-> 1

channel_id数组-> ABC,ABCD,ABDHC

现在使用循环中的更新查询用值更新所有id:

 update channel_table set channel_id=<modified_channel_value> where id=<saved_id>

为了更好的数据库设计,您可以将channel_id存储为单独的行,因为RDBMS的意思是单个值包含一行。在表中存储和处理CSV,表中的对象总是很困难。