如何在字段中查找字符串的一部分,如果存在则将其替换为另一个字段?

时间:2016-06-17 13:55:39

标签: tsql

我正在我的查询中构建一个案例,如果某个字段为空或者子字符串“Name Not Found”,则该字段应替换为另一个字段的值。

这是我到目前为止:     CASE WHEN [Salesperson1 Name] = '' THEN [Salesperson Name (Primary)]
    WHEN CONTAINS([Salesperson1 Name], 'Name Not Found') THEN [Salesperson Name (Primary)]
    ELSE [Salesperson1 Name]
    END,

但是当我运行查询时,我得到了这样的信息:
    Msg 7601, Level 16, State 2, Line 19
    Cannot use a CONTAINS or FREETEXT predicate on table or indexed view 'staging_leads_rr' because it is not full-text indexed.

我怎么能这样做?我究竟做错了什么?我不确定错误消息的含义,因为我不熟悉在T-SQL中编写内容。

2 个答案:

答案 0 :(得分:0)

您可以尝试使用CONTAINS运算符替换LIKE的来电:

CASE WHEN [Salesperson1 Name] = ''
     THEN [Salesperson Name (Primary)]
     WHEN [Salesperson1 Name] LIKE '%Name Not Found%'
     THEN [Salesperson Name (Primary)]
ELSE [Salesperson1 Name]
END

如果您真的想使用CONTAINS,则必须在[Salesperson1 Name]列q.v上创建全文索引。 this helpful SO post

答案 1 :(得分:0)

包含功能与SQL Server的全文搜索功能相关,更适合大规模文本处理。请参阅此处的参考:https://msdn.microsoft.com/en-us/library/ms142571.aspx

为了做到这一点,你应该使用更像charindex函数的东西,如果确实找到了字符串,则返回与搜索字符串的第一个字符位置相关的正值,否则返回0:https://msdn.microsoft.com/en-us/library/ms186323.aspx

然后你的查询会更像这样;

CASE WHEN [Salesperson1 Name] = '' THEN [Salesperson Name (Primary)]
WHEN CHARINDEX( 'Name Not Found', [Salesperson1 Name]) > 0 THEN [Salesperson Name (Primary)]
ELSE [Salesperson1 Name]
END,