Создать комплексный индекс на SQL сервере - PullRequest
0 голосов
/ 13 февраля 2020

Можно ли как-то создать индекс для выражения, чтобы я мог, например, написать запрос к полю, являющемуся строкой, но означающим число c?

Например, я Унаследована база данных, в которой есть столбец PolarFactor, в котором хранятся значения типа «234.28234» и тип varchar(100).

. Я хочу эффективно запросить этот столбец, получая все строки со значениями от 200 до 300.

Было бы здорово, если бы вы могли сделать что-то подобное ....

create index i1 on table(CAST(PolarFactor as Double))

Это недопустимо.

Но мне интересно, есть ли какой-нибудь способ сделать это, или если у кого-то есть идея получше.

1 Ответ

3 голосов
/ 13 февраля 2020

Да. Используйте вычисляемый столбец:

alter table t add polarfactor_double as (try_cast(PolarFactor as double)) persisted;

create index i1 on t(PolarFactor_Double);

Обратите внимание, что я использую try_cast() вместо cast(), поэтому ошибки не приводят к разрыву вставок.

Кроме того, вам, вероятно, следует исправить данные, таким образом, PolarFactor хранятся с использованием правильного типа данных. Не храните числа в виде строк.

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