ITエンジニアの成長ブログ

ITエンジニアとして行う勉強の発信&日々の生活で体験した楽しいことをゆるく発信

SQL Serverのデータ型「money」について

今回は、SQL Serverのデータ型「money」について簡単に調べたことをまとめたいと思います。
なぜ調べようと思ったかですが、今まで携わってきたシステムでデータ型「money」を使ったことがなかったためです。なぜ、使ってないのか。実は、便利なのでは。色々と気になりましたので調べる気分になりました。

データ型「money」とは?

SQL Serverには、データ型として「money」があります。文字通り、金額値または通貨値を表すデータ型みたいです。
money と smallmoney (Transact-SQL) - SQL Server | Microsoft Learn


実は、「money」だけでなく「smallmoney」というデータ型もあります。どちらも使い方は同じで、格納する値の大きさの要件によってどちらかを選ぶか決めれば良さそうです。

データ型 内部的な使用バイト数 扱えるデータの範囲
smallmoney 4 -214,747.3648 ~ 214,747.3647
money 8 -922,337,203,685,477.5808 ~ 922,337,203,685,477.5807

「smallmoney」は、日本円だと約24万円まで使えて「money」は約900兆円まで扱えるみたいですね。

また、上記表の”扱えるデータの範囲”を見てわかるように小数点以下4桁まで値の保持を行うことができるみたいです。日本では、実際に小数点以下、つまり円以下の金額を扱うことはないと思うのであまり意味なさそうな感じがします。たとえば、アメリカでは1ドルの下に”セント”という単位があるので、使えそうな気がしますが実際はどうなのでしょうか。

「money」の定数は?

「money」型もしくは、「smallmoney」の定数はどのように表すかですが、基本的にはintなどと同じで、数値文字列で引用符では囲まない形で表現すれば良いとのことです。

Constants (Transact-SQL) - SQL Server | Microsoft Learn

上記のリンクにも記載ありますが、以下のように記載することで「money」型定数となるようです。通貨記号をプレフィックスとして付加できるのが通常の整数の定数とは違うところですね。ちなみに、たとえ通貨記号をプレフィックスとして付けても通貨の情報は格納しないようです。あくまで数値のみ格納するということですね。

-- ドル
$12  
$542023.14  
$-23

-- 円
¥12  
¥542023.14  
¥-23

データ型「money」、「smallmoney」のメリデメは?

それでは、ざっくりとデータ型の概要を把握しましたが実際にこの「money」「smallmoney」のメリット、デメリットを以下に記したいと思います。
※あくまで個人的な見解です

メリット

・お金を格納するカラムであることがデータ型でわかる

デメリット

日本通貨では小数点以下がないので、場合によっては無駄なストレージ領域を消費する
→たとえば、「smallmoney」は「int」と同じようにストレージを4バイト使用しますが、小数点部分があるため「int」と比べると整数部の表せる範囲が4桁分少なくなります。
そのため、本来ならば「int」で問題ないケースでも「smallmoney」の上位の「money」型にすることで8バイトを使用してしまい、ややストレージの領域を消費することになります

メリット、デメリットはちょっと調べてもあまり分からなかったのでこれぐらいしか思いつきませんでした。。。

おわりに

いかがでしょうか。SQL Serverにデータ型「money」が存在することは以前から知っていましたが、使ったことがなかったので今回少し見てみました。実際に使う場面は少ないかもしれませんが、いつか役に立つかもしれないので概要だけは把握しておきたいなと思いました。

実際に金額を格納する場合は、「int」「bigint」「decimal」も使えると思うので、あまりメジャーじゃない(たぶん・・)型を使う必要はなさそうな感じがします。詳しい人にお聞きしたいところです。。

実際に「money」型を使っている日本のシステムはどのくらいあるのでしょうか。とても気になります。

今回はここまで。最後までお読みいただきありがとうございました。