У меня есть запрос, где я сравниваю значения с <
и >
. База данных старая и плохо спроектирована, поэтому, к сожалению, у нас есть столбцы, которые должны быть INT
, но вместо этого VARCHAR
.
Столбец называется PayCode
и имеет тип VARCHAR(50)
.
Если у меня есть предложение WHERE
, подобное следующему:
WHERE PayCode > 200
, тогда, когда я смотрю на план выполнения, появляются предупреждения о неявном преобразовании и оценках мощности.
Что я делаюЯ не понимаю, почему нижеприведенное избавляет от этих предупреждений:
WHERE PayCode > '200'
Я понимаю, что я сделал их оба VARCHAR
, но логика на самом деле, кажется, работает (это не сравнение по алфавиту)что означало бы, что он конвертирует оба в целые числа в любом случае. Разве это не было бы неявным преобразованием?
Как ни странно, приведенное ниже все еще вызывает предупреждения оценки количества элементов:
WHERE CAST(PayCode AS INT) > 200
Так почему же я могу использовать больше / меньше, чем с VARCHAR
представлениямицелые числа и имеют ли логику работу и нет ли неявных проблем преобразования или количества элементов?