我以为我理解了如何SELECT
从另一个SELECT
语句的结果中做一个,但似乎有某种我不理解的范围模糊。我正在使用 SQL Server 2008R2。
用一个例子来解释是最容易的。
创建具有单个 nvarchar 列的表 - 使用单个文本值和几个数字加载表:
CREATE TABLE #temptable( a nvarchar(30) );
INSERT INTO #temptable( a )
VALUES('apple');
INSERT INTO #temptable( a )
VALUES(1);
INSERT INTO #temptable( a )
VALUES(2);
select * from #temptable;
这将返回: apple, 1, 2
用于IsNumeric
仅获取可以转换为数字的表格行 - 这将留下文本值apple
。这工作正常。
select cast(a as int) as NumA
from #temptable
where IsNumeric(a) = 1 ;
这将返回:1, 2
但是,如果我使用与内部选择完全相同的查询,并尝试执行数字WHERE
子句,它会失败说 cannot convert nvarchar
value 'apple' to data type int
。它是如何恢复价值“苹果”的?
select
x.NumA
from
(
select cast(a as int) as NumA
from #temptable
where IsNumeric(a) = 1
) x
where x.NumA > 1
;
请注意,如果没有该WHERE
子句,失败的查询也可以正常工作:
select
x.NumA
from
(
select cast(a as int) as NumA
from #temptable
where IsNumeric(a) = 1
) x
;
我觉得这非常令人惊讶。我没有得到什么?TIA