У меня есть таблица (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 в одном шаблоне? В принципе, можно ли это сделать с помощью встроенного, или мне нужно реализовать регулярное выражение?
Не будет работать 'ABC [^ E]%'? –
@ l'L'l Можете ли вы подумать, что если это не сработает, если я хочу что-нибудь, начиная с AB, за исключением CE? Итак, AB%, кроме ABCE? По сути, есть способ сгруппировать две буквы вместе как набор, как в регулярном выражении? – wigs
@ l'L'l Я обновил код вопроса, чтобы включить лучшую инкапсуляцию моего сценария. Я попытался сделать это слишком специфично в первый раз, когда я думаю. – wigs