【问题标题】:SQL Server Like Match and ExcludeSQL Server 类似匹配和排除
【发布时间】: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


【解决方案1】:

绝对没有办法在一个 LIKE 模式中做你想做的事。

【讨论】:

    猜你喜欢
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多