Запрос с использованием производной таблицы с ISNUMERIC приводит к сбою преобразования (varchar в int) - PullRequest
2 голосов
/ 07 февраля 2012

Вот пример запроса:

DECLARE @table table (loc varchar(10))

INSERT INTO @table VALUES
('134a'), ('123'), ('abc'), ('124')

SELECT * 
FROM (
    SELECT * FROM @table WHERE ISNUMERIC(loc) = 1
) as a
WHERE CAST(loc as INT) BETWEEN 100 AND 200

Если у меня есть некоторые значения varchar, и я ограничиваю их числовыми значениями, используя ISNUMERIC в производной таблице в запросе, почему это приводит к ошибке преобразования?:

Преобразование не удалось при преобразовании значения varchar '134a' в тип данных int.

Есть ли способ обойти это?

1 Ответ

5 голосов
/ 07 февраля 2012

Предложение WHERE выполняется первым.Попробуйте:

DECLARE @table table (loc varchar(10)) 

INSERT INTO @table VALUES 
('134a'), ('123'), ('abc'), ('124') 

SELECT *  
FROM ( 
    SELECT * FROM @table
) as a 
WHERE ISNUMERIC(loc) = 1 and CAST(loc as INT) BETWEEN 100 AND 200 
...