【发布时间】: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 逻辑——如果你运行该查询,你会明白我的意思......
有什么想法吗?
【问题讨论】:
标签: sql sql-server string logic