2015-01-17 3 views
1

У меня есть таблица (DataTable) с колонной, которая содержит данные, как это в одном из столбцов:SQL Server Как Match и Исключить

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 

Я интересно, если есть способ, чтобы создать как шаблон, который будет соответствовать всем AB, кроме ABCE в одном шаблоне? В принципе, можно ли это сделать с помощью встроенного, или мне нужно реализовать регулярное выражение?

+1

Не будет работать 'ABC [^ E]%'? –

+0

@ l'L'l Можете ли вы подумать, что если это не сработает, если я хочу что-нибудь, начиная с AB, за исключением CE? Итак, AB%, кроме ABCE? По сути, есть способ сгруппировать две буквы вместе как набор, как в регулярном выражении? – wigs

+0

@ l'L'l Я обновил код вопроса, чтобы включить лучшую инкапсуляцию моего сценария. Я попытался сделать это слишком специфично в первый раз, когда я думаю. – wigs

ответ

0

Существует определенно никакой способ сделать то, что вы хотите, в одном шаблоне LIKE.