Дифференцировать экспоненты в T-SQL - PullRequest
2 голосов
/ 23 апреля 2019

В SQL Server 2017 (14.0.2)

Рассмотрим следующую таблицу:

CREATE TABLE expTest
(
    someNumbers [NVARCHAR](10) NULL
)

Допустим, вы заполнили таблицу некоторыми значениями:

INSERT INTO expTest VALUES('²', '2')

Почему следующий SELECT возвращает обе строки?

SELECT * 
FROM expTest 
WHERE someNumbers = '2'

Разве nvarchar не должен понимать, что '²' - это юникод, а '2' - это отдельное значение? Как (без использования функции UNICODE ()) я могу идентифицировать эти данные как неэквивалентные?

1 Ответ

2 голосов
/ 23 апреля 2019

Здесь - это дБ <> скрипка. Это показывает следующее:

  • Ваше наблюдение верно, даже если значения введены в качестве констант национального набора символов.
  • Версии символов "ASCII" на самом деле разные.
  • Проблема исчезает с учетом регистра с учетом регистра.

Я думаю, что показатель степени просто рассматривается как другой «случай» числа, поэтому они считаются одинаковыми при сортировке без учета регистра.

Сравнение - это то, что вы ожидаете от сопоставления с учетом регистра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...