Sql server 类似SQL Server的匹配和排除

Sql server 类似SQL Server的匹配和排除,sql-server,regex,sql-like,Sql Server,Regex,Sql Like,我有一个表DataTable,其中一列包含如下数据: DataColumn ABCD ABCE ABCF ABXY 我有另一个表MatchTable,它包含一个模式列和值列,可用于根据匹配从DataTable获取匹配行: MatchPattern Value AB% 1 我想从结果集中排除ABCE行,我不想在匹配表中有ABCE%、ABCF%等行,因为ABCE是规则的例外。我的模式可以是AB[^C]%,但这将排除所有ABC,我只想排除ABCE。这方面的sql是

我有一个表DataTable,其中一列包含如下数据:

DataColumn    
ABCD
ABCE
ABCF
ABXY
我有另一个表MatchTable,它包含一个模式列和值列,可用于根据匹配从DataTable获取匹配行:

MatchPattern   Value
AB%            1
我想从结果集中排除ABCE行,我不想在匹配表中有ABCE%、ABCF%等行,因为ABCE是规则的例外。我的模式可以是AB[^C]%,但这将排除所有ABC,我只想排除ABCE。这方面的sql是:

SELECT D.DataColumn, P.Value
FROM MatchTable M
INNER JOIN DataTable D ON D.DataColumn LIKE M.Pattern
我知道我可以在匹配表中添加另一列,称为ExcludePattern,如下所示:

MatchPattern   ExcludePattern Value
AB%            ABCE           1

SELECT D.DataColumn, P.Value
FROM MatchTable M
INNER JOIN DataTable D ON D.DataColumn LIKE M.MatchPattern
                          AND D.DataColumn NOT LIKE M.ExcludePattern

我想知道是否有一种方法可以创建一个相似的模式,它可以在一个模式中匹配除ABCE之外的所有ABs?基本上,这可以使用内置的like来完成吗?或者我必须实现regex吗?

在单一的like模式中,绝对没有办法实现您想要的功能。

ABC[^E]%难道不起作用吗?@l'l'l如果我想要从AB开始的任何东西,除了CE之外,你会认为这不起作用吗?那么,除了ABCE之外的AB%呢?本质上,有没有一种方法可以像在正则表达式中一样将两个字母组合在一起?@l'l我更新了问题代码,以更好地封装我的场景。我第一次想的时候就想把它说得太具体一点。那AB呢?除非你有一个少于4个字符的案例,否则这就行了。@davidaber我认为这不起作用,因为它会在排除ABXE的同时排除ABCE,这不是我想要的。