1. ホーム
  2. sql

[解決済み] データ型 varchar の変換エラー

2022-02-02 15:13:10

質問

私は現在、次のようなカラムを持つテーブルを持っています。 varchar . このカラムには、数値やテキストを格納することができます。あるクエリでは、これを bigint のカラムと結合している)。 bigint )

このフィールドに数字がある限りは問題ありませんでしたが、1行でもこのフィールドに数字ではなくテキストがあると、"Error converting data typeが表示されました。 varcharbigint ."エラーは、WHERE部分でどのテキストフィールドも表示されないことを確認しても発生します。

これを解決するために、次のようなビューを作成しました。

SELECT     TOP (100) PERCENT ID, CAST(MyCol AS bigint) AS MyCol
FROM         MyTable
WHERE     (isnumeric(MyCol) = 1)

しかし、ビューには数値を持つ行だけが表示され、Mycol を bigint にキャストしているにもかかわらず、このビューには データ型 varchar から bigint への変換エラー を実行すると、以下のクエリが表示されます。

SELECT * FROM MyView where mycol=1

ビューに対してクエリを実行するとき、ビューの背後で何が起こっているのかを知ってはいけません!単に2つの大きな数値フィールドを見るだけでいいのです。( 添付画像参照 mssql management studioでもビューフィールドはbigintと表示されます)

解決方法は?

OKです。やっと動くビューを作りました。

SELECT TOP (100) PERCENT id, CAST(CASE WHEN IsNumeric(MyCol) = 1 THEN MyCol ELSE NULL END AS bigint) AS MyCol
FROM         dbo.MyTable
WHERE     (MyCol NOT LIKE '%[^0-9]%')

ありがとうございます AdaTheDev コード・バイ・ムーンライト . お二人の回答を参考にさせていただきました。(もちろん他の回答者の方々にも感謝します)

現在、他のbigint colsと結合したり、'SELECT * FROM MyView where mycol=1'のようなことをすると、エラーなしで正しい結果を返します。私の推測では、クエリ自体のCASTが、Christian Hayterが他のビューで起こっているかもしれないと言ったように、クエリオプティマイザが元のテーブルを見ないと言う原因になっているのではないかと思います。