Это разрешено.
Следует иметь в виду, что диапазоны основаны на порядке сортировки, а не на символьных кодах, поэтому, возможно, в вашей сортировке по умолчанию она сортируется в позиции, которую вы не ожидаете.
Какое сопоставление по умолчанию для вашей базы данных?
Что возвращает следующее:
;WITH CTE(N) AS
(
SELECT 1 UNION ALL
SELECT 9 UNION ALL
SELECT 13 UNION ALL
SELECT 14 UNION ALL
SELECT 31
)
SELECT N
FROM CTE
ORDER BY NCHAR(N)
Для меня это возвращает
N
-----------
1
14
31
9
13
Итак, оба символа 9и 13 находятся вне диапазона 1-31.Следовательно
'ABC' + NCHAR(13) + NCHAR(9) + 'DEF' NOT LIKE N'%['+NCHAR(1)+N'-'+NCHAR(31)+N']%'
Что объясняет результаты вашего вопроса.Символ 14 не входит в него.
Вы можете использовать двоичное условие сортировки, чтобы заставить его сортировать больше, чем вы ожидали.например,
SELECT patindex(@unwanted COLLATE Latin1_General_100_BIN, @msg)
Возвращает 4
и во втором запросе.