从列中删除字符串组合

Posted

技术标签:

【中文标题】从列中删除字符串组合【英文标题】:Removing a combination of strings from a column 【发布时间】:2013-06-11 13:52:52 【问题描述】:

我今天早些时候曾问过一个类似的问题,但我意识到我的逻辑存在一些缺陷,因为我做了一些假设。

我想要做的是消除字符串中出现的某些单词...为了方便起见,我创建了一个包含一些示例的表格

create TABLE #BrokerNameT (BrokerName varchar(100))

INSERT INTO #BrokerNameT (BrokerName)
VALUES ('Morgan Stanley Co Cash'),
       ('Citi Group Algo Cash'),
       ('JP Morgan Algo'), ('JP Morgan Cash')


SELECT 
   CASE WHEN BrokerName LIKE '%CASH%' 
          THEN RTRIM(LTRIM(SUBSTRING(BrokerName, 1, CHARINDEX('Cash', BrokerName)-1)))
        WHEN BrokerName LIKE '%ALGO%' 
          THEN RTRIM(LTRIM(SUBSTRING(BrokerName, 1, CHARINDEX('algo', BrokerName)-1)))
        WHEN BrokerName LIKE '%Prog%' 
          THEN RTRIM(LTRIM(SUBSTRING(BrokerName, 1, CHARINDEX('prog', BrokerName)-1)))
        WHEN BrokerName LIKE '%BSE%' 
          THEN RTRIM(LTRIM(SUBSTRING(BrokerName, 1, CHARINDEX('bse', BrokerName)-1)))
        WHEN BrokerName LIKE '%FX%' 
          THEN RTRIM(LTRIM(SUBSTRING(BrokerName, 1, CHARINDEX('fx', BrokerName)-1)))
        WHEN BrokerName LIKE '%OTC%' 
          THEN RTRIM(LTRIM(SUBSTRING(BrokerName, 1, CHARINDEX('otc', BrokerName)-1)))
        ELSE '' 
    END
FROM #BrokerNameT

drop table #BrokerNameT

如您所见,有一个我不想在我的专栏中显示的单词列表。这个查询逻辑的问题是,如果它有两个单词是不允许的:让我们说 'Citi Group Algo Cash' ;它会在找到 CASH 并仍然保持“算法”时读取 CASE 逻辑——如果你运行该查询,你会明白我的意思......

有什么想法吗?

【问题讨论】:

【参考方案1】:

你试过了吗:

create TABLE #BrokerNameT (BrokerName varchar(100))
INSERT INTO #BrokerNameT (BrokerName) VALUES('Morgan Stanley Co Cash')
INSERT INTO #BrokerNameT (BrokerName) VALUES('Citi Group Algo Cash')
INSERT INTO #BrokerNameT (BrokerName) VALUES('JP Morgan Algo')
INSERT INTO #BrokerNameT (BrokerName) VALUES('JP Morgan Cash')

select
         replace(replace(replace(replace(replace(replace(BrokerName,'CASH',''),'ALGO',''),'Prog',''),'bse',''),'FX',''),'OTC','')
from #BrokerNameT

drop table #BrokerNameT

为您不想包含的每个单词添加一个新的替换。

【讨论】:

我想知道这样做是否会出现性能问题。我很可能也会出现问题...... 我没有遇到过这个问题,但这完全取决于您的记录集的大小。从我理解的问题来看,它似乎确实给出了您正在寻找的确切结果。任何像这样的字符串函数都有性能成本。 嵌套替换速度惊人。 是的,我从来没有遇到过嵌套替换的问题。

以上是关于从列中删除字符串组合的主要内容,如果未能解决你的问题,请参考以下文章

SQL 从列中删除字符

如何从列中删除多余的字符?

从列中删除逗号,空格和“NULL”字符串为0(零)

从列中删除所有值并将其设为空白 [重复]

如何从列类型列表中删除 pandas DataFrame 中的空值

PANDAS 从列中找到确切的给定字符串/单词