从列中删除字符串组合
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
为您不想包含的每个单词添加一个新的替换。
【讨论】:
我想知道这样做是否会出现性能问题。我很可能也会出现问题...... 我没有遇到过这个问题,但这完全取决于您的记录集的大小。从我理解的问题来看,它似乎确实给出了您正在寻找的确切结果。任何像这样的字符串函数都有性能成本。 嵌套替换速度惊人。 是的,我从来没有遇到过嵌套替换的问题。以上是关于从列中删除字符串组合的主要内容,如果未能解决你的问题,请参考以下文章