FC2ブログ

記事一覧

varchar をデータ型 numeric または decimal に変換中に、算術オーバーフロー エラーが発生しました。| SQL Server


今回は SQL Server で文字列を数値型に変換する際に、以下のようなエラーが発生し変換に失敗する件について覚え書きします。このエラーは型の桁数よりも大きい数値を代入した際に出力される普通のエラーなのですが、今回は桁数がそこまで多くない数値の文字列を数値型に変換しているのにエラーが出力されることから、冷静な判断を誤りました。普段から金額にはMONEY型を使用していたため、あまり使用しない型を使って初心者のように桁数の罠にハマりました。

varchar をデータ型 numeric (または decimal) に変換中に、算術オーバーフロー エラーが発生しました。


sqlserver_convert_decimal_error_01.png


前提条件
・Windows 7 professional 以降 / Windows Server 2008 R2 以降
・SQL Server 2008 Developer / Standard / Enterprise 以降



1.原因

SQL Server の場合、numeric や decimal の型で小数点を保持するように定義した場合、最初に指定する桁数が全体の桁数なので、小数点以下の桁数を大きくしてしまうと整数の桁数が小さくなってしまいます。
decimal(全体の桁数, 小数点以下の桁数)
numeric(全体の桁数, 小数点以下の桁数)

例えば decimal(10, 4) とした場合、整数は6桁までとなりますので、整数が7桁以上の数値を代入しようとすると算術オーバーフローが発生します。



2.検証コード


USE testDB
GO

SELECT CONVERT(numeric(10, 4), '123456.1234'); --整数6桁+小数4桁まで
SELECT CONVERT(decimal(10, 4), '123456.1234'); --整数6桁+小数4桁まで
SELECT CONVERT(numeric(11, 4), '1234567.1234'); --整数7桁+小数4桁まで
SELECT CONVERT(decimal(11, 4), '1234567.1234'); --整数7桁+小数4桁まで
SELECT CONVERT(numeric(12, 4), '12345678.1234'); --整数8桁+小数4桁まで
SELECT CONVERT(decimal(12, 4), '12345678.1234'); --整数8桁+小数4桁まで
SELECT CONVERT(numeric(10, 4), '1234567.1234'); --算術オーバーフロー
SELECT CONVERT(decimal(10, 4), '1234567.1234'); --算術オーバーフロー



3.実行結果

123456.1234
123456.1234
1234567.1234
1234567.1234
12345678.1234
12345678.1234
算術オーバーフロー
算術オーバーフロー





最後までお読みいただき、ありがとうございます。
他にも SQL Server に関する記事をご紹介しておりますのでご参考頂ければ幸いです。


関連記事

コメント

コメントの投稿

カテゴリ別記事一覧

広告

プロフィール

石河 純


著者名 :石河 純
自己紹介:素人上がりのIT技術者。趣味は卓球・車・ボウリング

IT関連の知識はざっくりとこんな感じです。
【OS関連】
WindowsServer: 2012/2008R2/2003/2000/NT4
Windows: 10/8/7/XP/2000/me/NT4/98
Linux: CentOS RedHatLinux9
Mac: macOS Sierra 10.12 / OSX Lion 10.7.5 / OSX Snow Leopard 10.6.8
【言語・データベース】
VB.net ASP.NET C#.net Java VBA
Xamarin.Forms
Oracle10g SQLServer2008R2 SQLAnywhere8/11/16
ActiveReport CrystalReport ReportNet(IBM)
【ネットワーク関連】
CCNP シスコ技術者認定
Cisco Catalyst シリーズ
Yamaha RTXシリーズ
FireWall関連
【WEB関連】
SEO SEM CSS IIS6/7 apache2

休みの日は卓球をやっています。
現在、卓球用品通販ショップは休業中です。