Контекст: SQL Server 2008
У меня есть таблица mytable
, которая содержит два столбца NVARCHAR
id
, title
.
Все данные в столбце id
фактически являются числовыми, за исключением одной строки, которая содержит значение "test".
Я хочу получить все идентификаторы между 10 и 15, поэтому мне нужен SQL Server для преобразования значений столбца id в INTEGER
.
Я использую ISNUMERIC(id) = 1
для устранения не числовых значений, но SQL Server довольно странно с этим запросом.
SELECT
in.*
FROM
(SELECT
id, title
FROM
mytable
WHERE
ISNUMERIC(id) = 1) in
WHERE
in.id BETWEEN 10 AND 15
Этот запрос вызывает следующую ошибку:
Ошибка конверсии при преобразовании значения nvarchar 'test' в тип данных int.
Внутренний запрос исключает строку с значением "test" id, поэтому "in" не должен содержать ее. Почему SQL Server все еще пытается его преобразовать?
Я что-то упустил? Как я могу обойти это?
P.S. Я пробовал WHERE CAST(in.id AS INTEGER) BETWEEN 10 AND 15
, но не работал.