念のため。
SQL Server 2012 では TRY_CONVERT
が導入されています
この必要性のために。したがって、次のクエリは NULL
を返します。 エラーではなく。
SELECT TRY_CONVERT ( FLOAT, 'Fish')
プレ>シリアル プランであっても、
WHERE
が一致する保証はありません。 句はSELECT
の前に発生します 評価されます。説明したように このブログ投稿 SQL Server 2005 以降では、以前のバージョンよりも発生する可能性が高くなります。 SQL のデータベース エンジン機能の動作変更サーバー 2005 具体的には、次のように呼び出します。この動作に関する詳細な議論は、Craig Freedman 変換と算術エラー .
2012 より前のバージョンおよび
TRY_CONVERT
の場合CAST AS FLOAT
をラップする必要がありますCASE
で 声明。例SELECT CASE WHEN ISNUMERIC(Col)=1 THEN CAST(Col AS FLOAT) END AS Col FROM Table WHERE ISNUMERIC(Col)=1
プレ>
ISNUMERIC
としてエラーが発生しないようにすることは、まだ完全に保証されているわけではありません。 それ自体は、具体的にフロートするのではなく、数値データ型のいずれかに値がキャストされることを確認するだけです-1/7400335#7400335">失敗する入力の例は'.'
です。
CASE
オンラインの書籍では、ほとんどがショート サーキットであることが文書化されています (いくつかの例外についてここで説明します )これに関する追加の議論/苦情は、接続項目 SQL Server は非論理的なエラーを発生させません および 同様の問題の適切な説明 SQLキウイによって