Можете ли вы объяснить мне, почему следующий запрос возвращает строки, которые не удовлетворяют условию LIKE. Столбец в таблице имеет регистр, чувствительный к регистру, поэтому запрос не должен возвращать ничего.Оператор SQL Server LIKE с диапазоном символов и регистром, чувствительным к регистру
CREATE TABLE #temp (col CHAR COLLATE SQL_Latin1_General_CP1_CS_AS);
INSERT INTO #temp VALUES ('A'), ('B'), ('C'), ('D'), ('E');
SELECT * FROM #temp WHERE col LIKE '[b-d]';
Любой другой чувствителен к регистру параметры сортировки (например. Latin1_General_100_CS_AS, Polish_100_CS_AS, Modern_Spanish_100_CS_AS) также не работает правильно.
Насколько я могу найти только коллекции двоичного порядка сортировки (Latin1_General_100_BIN2, Modern_Spanish_100_BIN2), хорошо работает.
Эта ошибка существует только в том случае, если я использую диапазон в режиме LIKE. Когда я меняю [b-d] на [bcd], все в порядке.
Является ли это ошибкой в базе данных?
Я использую Microsoft SQL Server 2008 (SP3) - 10.0.5846.0 (X64) Enterprise Edition (64-разрядная версия) на Windows NT 6.1 (Build 7601: Service Pack 1)
Смотрите для получения дополнительной информации здесь: http://stackoverflow.com/questions/8410523/how-does-sql-server-wildcard -character-range-eg-ad-work-with-case-sensitive – Eugene