2011-12-10 6 views
0

以下は、フィールドを型にキャストして評価するために必要なクエリと似ていますが、対象のデータ型にキャストできないデータがある行は無視したいと考えています。2番目の条件を短絡するためにこのクエリを書くより良い方法はありますか?

select * from MyTable 
where case when isnumeric(SomeField) = 1 then SomeField else null end > 1 

したがって、上記の例では、私はSomeFieldにおける任意の非数値フィールドがあった場合起因する変換エラーを回避しながら、1より大きい値をテストすることができています。私はこの解決策で大丈夫ですが、もっと良い方法があるのだろうかと思っています。

+3

このデータベースに入力されるデータを制御できますか?なぜあなたはまずデータ型について心配する必要があるのか​​不思議です。 –

+0

これは、csvファイルからSQLテーブルにデータをインポートするアプリケーションです。だから私は、ターゲットフィールドのデータ型が何であるかに基づいて、ソースフィールドの無効なデータ(切り捨てられた文字データ、数値フィールドなど)があるかどうかを調べ、データグリッドビューのレコードをハイライトしますユーザーはインポートする前に調整を行うことができます。 –

+0

しかし、ええ、私が提供した情報に基づいてあなたの応答を読んでいたら、私はそれをあまりにもアップしました:)まあ、それは常識のためにとにかくupvoteしますが、残念ながらこのシナリオでそれを適用することはできません。 –

答えて

1

これを行うには良い方法はないという結論に達しました。

1

私はクエリのWHERE条件を使用して「最大整数値を超えた」とエラーが表示されます。しかし、私のデータベースには非常に大きな数字がいくつかありますが、おそらくそれはあなたのために働いていません。大きな数字を扱う代替を以下にリストされている

where isnumeric(SomeField) = 1 and convert(numeric(18,0),SomeField) > 1 

ISNUMERIC()チェックが変換()の前に来なければなりません。

パフォーマンスは同じです。

+0

isnumeric()関数の前にsqlがconvert()関数を実行するのを防ぐことはできません。変換できない場合は、回避したいエラーがスローされます。私のデータベースには特に大きな数字はありませんが、とにかくisnumericのサイズ制限を私の注意を引くために+1します。 –

関連する問題