Извините, если этот вопрос не ясен.Короче говоря, у нас кто-то допустил несколько ошибок, которые привели к довольно неприятной проблеме повреждения данных.В результате мы получили кучу записей t-sql, которые выглядят следующим образом: «значение, значение, значение» и «это, это значение, это значение» с несколькими тысячами вариаций (иболее 110 тыс. записей).
Проблема в том, что нам нужно сопоставлять элементы, содержащие запятую, в любом месте строки, которая окружена любым символом (или его отсутствием), за исключением пробела, с помощью SQLГДЕ пункты.В качестве примера я создал следующую таблицу элементов, с битом, который указывает, вернее или нет, данный элемент должен быть возвращен запросом.
DECLARE @Ttests Table (
toMatch varchar(4000),
shouldMatch bit
)
INSERT INTO @Ttests
VALUES
('value1,value2,value3,value1,value2,value3', 1),
('value1, value2, value3', 0),
(',value1, value2, value3', 1), --starts with a comma
('value1, value2,value2', 1),
('this, is a sentence,this, is a sentence', 1),
('value1, value2, value3,', 1), -- ends in a comma
('value1 ,value2, value3', 0);
Ближайшее, что я могу получить сегодня вечеромэто что-то вроде:
SELECT
*
FROM @Ttests
WHERE PatIndex('[^ ]%,[^ ]%', toMatch) > 0
OR PatIndex(',%', toMatch) > 0
OR PatIndex('%,', toMatch) > 0
Однако он возвращает ложное совпадение с последним элементом.Есть идеи?