我需要在字符串字段中搜索包含电子邮件和附加注释的模式。一个例子如下:
Dear XXX: We are sorry to inform you that your
application has been put on hold because YYY.
Additional comments: this application was not held for ZZZ.
我正在寻找的模式是电子邮件正文中的“ZZZ”。但不是在评论中。如果我只做field like 'ZZZ'
,我将会收到这条记录,这不是我想要的。在这种情况下,有没有办法准确地进行搜索?
请注意,记录的子集具有以这种方式构造的字段,其他记录可能不包含此结构(即没有Additional comments:
。粗体字母标记子集的结构。
答案 0 :(得分:1)
如果总有“附加评论:”,你可以做类似的事情......
WHERE field LIKE '%ZZZ%' AND field NOT LIKE 'Additional comments:%ZZZ%'
答案 1 :(得分:0)
尝试一下:
WITH cte
AS
(SELECT
CASE
WHEN CHARINDEX('Additional Comment',[field]) = 0 THEN [field]
WHEN CHARINDEX('Additional Comment',[field]) > 0 THEN
LEFT([field],CHARINDEX('Additional Comment',[field])-1)
END AS Adjusted_field
FROM table)
SELECT Adjusted_field
FROM cte
WHERE
Adjusted_field LIKE '%zzz%'
这使用CTE基本上删除文本字段中“附加注释”行之后的任何内容。 CASE语句使用CHARINDEX搜索“附加注释”,如果找不到该字符串(CHARINDEX = 0)则返回整个文本字段,如果找到该字符串,则它只返回之前(左)的文本。 “附加评论”字符串。
然后在最后的SELECT查询中,您可以在调整后的文本字段中搜索所需的字符串,该字符串现在完全忽略“附加注释”字符串之后的任何内容。