在字符串

时间:2016-02-26 20:43:11

标签: sql sql-server tsql

我需要在字符串字段中搜索包含电子邮件和附加注释的模式。一个例子如下:

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:。粗体字母标记子集的结构。

2 个答案:

答案 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查询中,您可以在调整后的文本字段中搜索所需的字符串,该字符串现在完全忽略“附加注释”字符串之后的任何内容。