Sql анализирует столбец как int и проверяет, находится ли он в пределах диапазона

Я использовал ответ с наибольшим количеством голосов из здесь, чтобы проверить, является ли значение ячейки является целым числом. Но мне также нужно сделать проверку диапазона на нем.

SELECT * FROM Table
WHERE (dbo.IsInteger(FieldName) = 1) AND FieldName > 400 AND FieldName < 500

Но это возвращает ошибку преобразования, так как некоторые ячейки в столбце содержат текст. Итак, возможно ли получить подмножество, состоящее только из результатов запроса IsInteger, а затем выполнить проверку диапазона результата?


person peirix    schedule 09.09.2011    source источник


Ответы (1)


Вам нужно обернуть его выражением CASE. Я немного изменил запрос, чтобы использовать BETWEEN, чтобы не повторять выражение.

SELECT * FROM Table
WHERE CASE WHEN dbo.IsInteger(FieldName) = 1 
           THEN FieldName END BETWEEN 401 AND 499

Результат выражения будет NULL, когда dbo.IsInteger(FieldName) <> 1 не будет соответствовать предикату BETWEEN.

Конечно, это совершенно невозможно, но ваш исходный запрос тоже.

person Martin Smith    schedule 09.09.2011