sql >> データベース >  >> RDS >> Sqlserver

金額を格納するには、どのデータ型を使用すればよいですか?

    パプチーノ、

    実行する算術演算が足し算と引き算だけであることが確実でない限り、money と smallmoney の型はお勧めしません。為替レートやパーセンテージなどを扱う場合、これらのタイプで実際に問題が発生するリスクがあります。

    これは、除算が関係する場合の money、decimal、float の使用の違いを示す小さな例の 1 つにすぎません。違いがはるかに劇的な例を考え出すことは可能です.

    declare @m1 money, @m2 money, @m3 money
    declare @d1 decimal(19,4), @d2 decimal(19,4), @d3 decimal(19,4)
    declare @f1 float, @f2 float, @f3 float;
    set @m1 = 1.00;
    set @m2 = 345.00;
    set @m3 = @m1/@m2;
    set @d1 = 1.00;
    set @d2 = 345.00;
    set @d3 = @d1/@d2;
    set @f1 = 1.00;
    set @f2 = 345.00;
    set @f3 = @f1/@f2;
    select @m3, @d3, @f3;
      

    結果:0.0028 0.0029 0.00289855072463768

    業界によっては、適切なデータ型を決定するのに役立つガイドラインや規制がある場合があります。正解はひとつではありません。

    追加のコメント:

    money/money が money であってはならないことは正しいのですが、SQL Server は (不可解なことに) まさにその結果を生成します。2 つの money 値の商から money を入力します。これは偽物ですが、以下の例からわかるように、意味はありませんが、得られるものです:

    declare @m1 money, @m2 money;
    declare @d1 decimal(19,4), @d2 decimal(19,4);
    set @m1 = 1.00;
    set @m2 = 345.00;
    set @d1 = 1.00;
    set @d2 = 345.00;
    select @m1/@m2, @d1/@d2
      

    結果:0.0028 0.0028985507246376811

    タイプ money の結果 0.0028 は、正しい結果より 3 ~ 4% 少なくなっています。

    もちろん、通貨の値を分割する必要がある状況はたくさんあります。 money 型を使用する危険性は、商が間違った型である (そして答えが正しい型に十分に近くない) ことです。通貨の分割が必要な質問の例:

    320 元を両替し、銀行から 47.3 米ドルを受け取ったとします。提示された為替レートは?

    23 ドルを投資し、1 年後には 31 ドルの価値があるとします。収益率は?

    これらの計算では、通貨の値を割る必要があります。



    1. WordPressプラグインで新しいページを作成するにはどうすればよいですか?

    2. 一時テーブルの名前を物理テーブルに変更する

    3. ExcelファイルをMySQLWorkbenchにインポートする方法は?

    4. 私のSQLコードのどこに問題がありますか?