以下は、私が扱っている種類のテーブル構造とデータのサブセットです。
CREATE TABLE #Test
(
Val varchar(5)
,Type varchar(5)
)
INSERT #Test VALUES ('Yes','Text')
INSERT #Test VALUES ('10','Int')
INSERT #Test VALUES ('10.00','Float')
INSERT #Test VALUES ('9.00','Float')
INSERT #Test VALUES ('9','Int')
列 'Val' が <= 9.00 (数値データ型である必要があります) かどうかを知らせるクエリを作成したいと考えています。私は次のようにしてこれを行いました:
SELECT *
FROM
(
SELECT Val
FROM #Test
WHERE Type = 'Int'
) IntsOnly
WHERE IntsOnly.Val <= 9.00
これにより、算術オーバーフロー エラーが発生します。ただし、値が「10」のデータ行を除外すると、次のようになります。
SELECT *
FROM
(
SELECT Val
FROM #Test
WHERE Type = 'Int'
AND Val <> '10'
) IntsOnly
WHERE IntsOnly.Val <= 9.00
問題なく動作します。私の質問は、データを必要な形式に簡単に変換できることを知っているので、これを修正する方法ではありません。
私の質問は、「Val」列の「10」の値がエラーを返す理由です。確かに、ロジックは「False」を返すだけで行を除外する必要があります。これは、「10」(暗黙的に変換されていると思います) が 9.00 より大きいためです。
ありがとう。