「varchar の値 11111111111111 の変換が int 型の列でオーバーフローしました。」って何だよ!【SQL】】

新卒SE

 

「varchar の値 11111111111111 の変換が int 型の列でオーバーフローしました。」というメッセージができて困っている。

 

こうした疑問を解決します。

 

先日、業務でSQL Server Management Studio (SSMS)を利用していたところ、こんなエラーが発生しました。

 

SELECT * FROM A WHERE "ID" = 11111111111111

 

を実行してみたところ

varchar の値 11111111111111 の変換が int 型の列でオーバーフローしました。

 

と。

きだ
きだ

何なんだこれは!!!SELECT文のどこがおかしいんだよ!!!

 

この問題を解決するために私がしたことを書きます。

 

SQLのオーバーフローを解決するために試したこと

①全件検索

SELECT * FROM A

 

を実行してみたところ、

varchar の値 ‘11111111111111’ の変換が int 型の列でオーバーフローしました。

 

というメッセージは表示されずにデータを抽出することができました。

きだ
きだ

もちろん、これではデータが絞れないのでよろしくないのですが。。。

 

②小さな数字を条件にしてみる

SELECT * FROM A WHERE "ID" = 11

WHERE句で指定する条件の桁数を小さくしてあげると、特にエラーは発生せずにクエリが完了しました。

 

③テーブルの確認

きだ
きだ

テーブルで指定している桁数の上限を超えているのかな、、、

とも思いましたが、データをテーブルに入れることはできています。

 

この問題を解決した方法

条件指定する数字を’ ‘で囲ってあげる

です。

具体的には

SELECT * FROM A WHERE "ID" = '11111111111111'

 

としてあげることで無事に

varchar の値 11111111111111 の変換が int 型の列でオーバーフローしました。

 

というエラーを出さずにクエリを完了させることができました!

皆さんも、SQLで「テーブルにデータを格納することはできているのにSELECT文で取り出そうとするとオーバーフローする!」という症状に悩んでいるときは、オーバーフローしてしまっている値に対して「’ ‘」をつけてみてはいかがでしょうか?

 

コメント

タイトルとURLをコピーしました