我有一张表需要根据搜索条件进行清理。
Create table dbo.tempNames(ID int null, Name varchar(500) null)
INSERT INTO dbo.tempNames values(1,'ABC Financial')
INSERT INTO dbo.tempNames values(1,'ABC Financial Company')
INSERT INTO dbo.tempNames values(1,'ABC Financial Company solely in its capacity')
INSERT INTO dbo.tempNames values(1,'ABC Financial in its capacity')
我有一条规则,即在特定子字符串1)之后删除所有内容<)>
我写的是什么
SELECT ID, CASE WHEN Name LIKE '%in its capacity%' THEN SUBSTRING(Name,1,charindex('In Its Capacity',Name,1)-1)
WHEN Name LIKE '%solely%' THEN SUBSTRING(Name,1,charindex('solely',Name,1)-1)
ELSE Name END As ChangedName
FROM dbo.tempNames
对于第3行,ChangedName将成为&#39; ABC Financial Company&#39;。在更新所有字符串之前,我如何递归执行此操作。
预期输出
Create table dbo.outputNames(ID int null, ChangedName varchar(500) null)
INSERT INTO dbo.outputNames values(1,'ABC Financial')
INSERT INTO dbo.outputNames values(1,'ABC Financial Company')
INSERT INTO dbo.outputNames values(1,'ABC Financial Company')
INSERT INTO dbo.outputNames values(1,'ABC Financial')
由于
答案 0 :(得分:2)
这是另一个示例,搜索所有关键字并获得第一名。
SELECT ID,a.pos,LEFT(Name,ISNULL(a.pos,LEN(name))) AS changename
FROM dbo.tempNames
CROSS APPLY( SELECT MIN(NULLIF(c.pos,0)) AS pos FROM
(VALUES(CHARINDEX(' solely',Name)),(CHARINDEX(' in its capacity',Name))) c(pos)
) a
ID pos changename ----------- ----------- -------------- 1 NULL ABC Financial 1 NULL ABC Financial Company 1 22 ABC Financial Company 1 14 ABC Financial