SELECT
別のステートメントの結果からa を実行する方法を理解したと思っていましたが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
ただし、まったく同じクエリを内部選択として使用し、数値句を実行しようとすると、値 'apple' を data type にWHERE
変換できないと言って失敗します。どのようにして「りんご」という値を取り戻したのでしょうか??nvarchar
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
;
これは非常に驚くべきことです。何が得られないのですか?ティア