【发布时间】:2015-01-17 23:52:58
【问题描述】:
我有一个表 (DataTable),其中一列包含这样的数据:
DataColumn
ABCD
ABCE
ABCF
ABXY
我有另一个表 (MatchTable),其中包含模式列和值列,可用于根据匹配从 DataTable 中获取匹配行:
MatchPattern Value
AB% 1
我想从结果集中排除 ABCE 行,并且我不想在匹配表中包含 ABCD%、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 之外的所有 AB?基本上,这可以使用内置的like来完成还是我必须实现正则表达式?
【问题讨论】:
-
ABC[^E]%不工作吗? -
@l'L'l 如果我想要除 CE 之外的任何以 AB 开头的东西,你能想一想这是否行不通吗?那么,AB% 除了 ABCE 吗?基本上有没有办法像正则表达式一样将两个字母组合在一起?
-
@l'L'l 我更新了问题代码以更好地封装我的场景。我第一次想的时候试图让它有点太具体了。
-
AB_[^E]%怎么样?除非您的大小写少于 4 个字符,否则这将起作用。 -
@DavidFaber 我认为这行不通,因为它会排除 ABXE,同时排除 ABCE,这不是我想要的。
标签: sql-server regex sql-like