#sql-server #collation
#sql-сервер #сопоставление
Вопрос:
Я запустил запрос ниже, чтобы увидеть, как строки будут сравниваться в SQL Server, поскольку другой запрос, основанный на сравнении полей с этим типом данных, дал результаты, отличные от ожидаемых. Я не был уверен, будет ли угловая скобка считаться меньшим значением, чем число (на основе таблицы ASCII это не так, но хотел проверить). В результате я просмотрел несколько сообщений, касающихся сравнения строк, сопоставления и ожидаемых значений, и все они, похоже, подтверждают, что это не должно работать таким образом. Параметры сортировки в базе данных (как и в поле, вызвавшем проблемы) — SQL_Latin1_General_CP1_CI_AS .
SELECT ASCII('<') AS [<]
,ASCII('0') AS [0]
,CASE WHEN '<0.1' < '0.1' THEN 1 ELSE 0 END AS TEST1
,CASE WHEN '<' < '0' THEN 1 ELSE 0 END AS TEST2
,CASE WHEN ASCII('<') < ASCII('0') THEN 1 ELSE 0 END AS TEST3
Результат:
< 0 TEST1 TEST2 TEST3
60 48 1 1 0
Любые идеи, которые укажут мне правильное направление, будут очень признательны!
Комментарии:
1. Код ASCII и порядок сортировки символов не совпадают. Значение, возвращаемое из
ASCII
, является согласованным, независимо от сортировки.2. Спасибо за объяснение, это помогает! В результате вашего ответа я пытался найти таблицу или что-то, что определяет последовательность на основе сопоставления, но, по-видимому, это один из тех хорошо хранимых секретов. Это действительно нормально, когда я знаю, что могу ожидать, что результаты будут согласованными, даже если я на самом деле не знаю, чему они соответствуют.