Query using a derived table with ISNUMERIC results in conversion failure (varchar to int)
-
17-05-2021 - |
Pergunta
Here's an example query:
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
If I have some varchar values and I limit them to numeric values using ISNUMERIC
in a derived table in the query, why does it result in a conversion error?:
Conversion failed when converting the varchar value '134a' to data type int.
Is there a way around this?
Solução
The WHERE
clause executes first. Try:
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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow