こんにちは。
これを「これは尋ねるのが難しい質問でした」と前置きします。その部分をカバーしたと思うと、変換エラーが発生します。明らかに、私はしません。
状況: INT データを含む VARCHAR フィールドに加えて、変換の問題を引き起こしているいくつかのランダムなガベージ文字列。これが私がやろうとしていることの例です。
DECLARE @MyTABLE TABLE (
Value VARCHAR(50) NOT NULL
);
-- insert some strings
INSERT INTO @MyTABLE (Value) VALUES('400'), ('H-100'), ('H-200'), ('500'),
('600'), ('H-300');
-- conversion fails for the actual strings
SELECT *
FROM @MyTABLE m
WHERE CAST(m.Value AS INT) BETWEEN 1 AND 1000;
-- what I THOUGHT would fix it, but doesn't...
SELECT *
FROM (SELECT * FROM @MyTABLE WHERE Value NOT LIKE 'H%') X
WHERE CAST(X.Value AS INT) BETWEEN 1 AND 1000;
すべての悪いデータを一時テーブルに挿入してクエリを実行するなど、これを行うことができる他の方法があることを認識していますが、クエリが機能しない理由とそれを修正するために何ができるかを知りたいです.
編集 - これは SQL 2008 R2 用です
前もって感謝します!