选择不在其前面或后面跟着字母的字母,例如寻找Ag或* Ag但不是SAG或MAGNET

时间:2016-07-29 07:39:38

标签: sql sql-server string search pattern-matching

我需要在由各种字符串长度/字符串位置组成的列中找到字符 Ag ,但 Ag 不构成单词的一部分(例如S) AG ,即 Ag 不在任何字母[AZ]之前和/或之后。

我试过了

WHERE AttributeColumn LIKE '%[^A-Z]AG[^A-Z]%' 

但它排除了Ag之前或之后没有其他字符的结果(即字符串仅包含 Ag )。也许带有*函数的REGEXP?因此 Ag 可以在[A-Z]之前和/或之后为零或更多......

如果这可以工作,你可以提供一个MS SQL查询的例子吗?

4 个答案:

答案 0 :(得分:1)

如何使用有效的分隔符填充搜索到的字符串,例如空间? e.g。

WHERE ' ' + AttributeColumn + ' ' LIKE '%[^A-Z]AG[^A-Z]%' 

答案 1 :(得分:1)

怎么样?,

WHERE AttributeColumn LIKE '%[^A-Z]AG[^A-Z]%' 
    OR AttributeColumn LIKE 'AG[^A-Z]%' 
    OR AttributeColumn LIKE '%[^A-Z]AG' 
    OR AttributeColumn = 'AG' 

答案 2 :(得分:0)

您能否匹配搜索的具体情况?如果' Ag'当然没有结果

USE tempdb;
GO
CREATE TABLE dbo.foo(bar VARCHAR(32) COLLATE Latin1_General_CS_AS);
GO
INSERT dbo.foo VALUES('John'),('john');
GO
SELECT bar FROM dbo.foo 
WHERE bar LIKE 'j%';
-- 1 row

SELECT bar FROM dbo.foo 
WHERE bar COLLATE Latin1_General_CI_AS LIKE 'j%';
-- 2 rows

GO    
DROP TABLE dbo.foo;

此处有更多信息Is the LIKE operator case-sensitive with MS SQL server?

答案 3 :(得分:0)

这对你有用吗? ([^A-Z]|\s)AG([^A-Z]|\s)