PATINDEX не обрабатывает ваши строки как списки с разделителями (значения, разделенные запятыми) - он ищет совпадения со всей строкой.
Роб идет в школу, получает наказаниеРоб идет в школу
PATINDEX ('% Роб идет в школу%', значение)> 0 оценивается как истинное для них обоих, потому что подстановочный знак соответствует любой строке из 0 или более символов ,Ваш второй и третий шаблоны никогда не будут оценены.
If you want to test which pattern is returning true, try this:
CASE
WHEN (PATINDEX('%Rob goes to school%',value) > 0) THEN 'Pattern 1'
WHEN (PATINDEX('%Rob is ill%',value) > 0 ) THEN 'Pattern 2'
WHEN (PATINDEX('%get punished%',value) > 0) THEN 'Pattern 3'
ELSE 'No Match Found' END
Если вы хотите, чтобы шаблон соответствовал первому значению, но не второму, тогда ищите (PATINDEX('%Rob goes to school,%',value) > 0)
с запятой.
В противном случае - если вы хотите обрабатывать строки как значения, разделенные запятыми, PATINDEX - не лучший инструмент для этого.Другие варианты могут включать преобразование ваших строк в таблицы с помощью функции табличных значений, или что у вас есть.