SQL Server
で SELECT ステートメントの論理処理順序
があります。 、あるステップで定義されたオブジェクトが後続のステップの句でいつ使用可能になるかを決定します:
- から
- オン
- 参加
- どこ
- GROUP BY
- キューブ付きまたはロールアップ付き
- 持っている
- 選択
- 明確
- 順番
- トップ
これがクエリの処理方法であり、クエリは完全に正常に見えます。しかし、時々、SQL Server
クエリを最適化するために、この順序に従わないことにしました。
あなたの場合、SQL Server
単純にクエリを別のクエリに変更/変換して convert
を実行している可能性があります where isnumeric
を適用する前の関数 フィルタリング。
クエリをもう少し複雑にすると (それでも同じ結果が得られます)、SQL Server
今度はコードが正しく実行されています:
;with isnum AS ( SELECT 結果 FROM #temp WHERE ISNUMERIC(結果) =1 GROUP BY 結果 HAVING MAX(結果) =結果)SELECT 結果、ISNUMERIC(結果)FROM isnumWHERE CONVERT(INT,結果)> 1;コード> プレ>
あなたの場合 (そして、これは、さまざまな型が 1 つの列に格納されているような状況で私が行っていることです)、単に TRY_CONVERT
関数:
; with isnum AS ( SELECT result FROM #temp WHERE ISNUMERIC(result) =1)SELECT 結果、ISNUMERIC(result)FROM isnumWHERE TRY_CONVERT(INT, result)> 1
プレ>