SQL Server では MONEY または DECIMAL(x,y) データ型を選択する必要がありますか? 質問する

SQL Server では MONEY または DECIMAL(x,y) データ型を選択する必要がありますか? 質問する

moneyデータ型と、decimal(19,4)(money が内部的に使用しているものと思われる)データ型との間に実際の違いがあるかどうかが気になります。

これは SQL Server に固有のものであることは承知していますmoney。どちらか一方を選択する強い理由があるかどうかを知りたいです。ほとんどの SQL Server サンプル (AdventureWorks データベースなど) では、価格情報などには とmoneyは使用されません。decimal

引き続き money データ型を使用するべきですか、それとも代わりに 10 進数を使用する利点がありますか? money の方が入力する文字数が少なくなりますが、それは正当な理由ではありません :)

ベストアンサー1

決してお金を使うべきではありません。お金は正確ではなく、まったくのゴミです。常に小数点/数字を使用してください。

私の言っていることを理解するには、これを実行してください:

DECLARE
    @mon1 MONEY,
    @mon2 MONEY,
    @mon3 MONEY,
    @mon4 MONEY,
    @num1 DECIMAL(19,4),
    @num2 DECIMAL(19,4),
    @num3 DECIMAL(19,4),
    @num4 DECIMAL(19,4)

    SELECT
    @mon1 = 100, @mon2 = 339, @mon3 = 10000,
    @num1 = 100, @num2 = 339, @num3 = 10000

    SET @mon4 = @mon1/@mon2*@mon3
    SET @num4 = @num1/@num2*@num3

    SELECT @mon4 AS moneyresult,
    @num4 AS numericresult

出力: 2949.0000 2949.8525

お金をお金で割ってはいけないと言った人たちへ:

以下は相関関係を計算するためのクエリの 1 つですが、これを money に変更すると間違った結果になります。

select t1.index_id,t2.index_id,(avg(t1.monret*t2.monret)
    -(avg(t1.monret) * avg(t2.monret)))
            /((sqrt(avg(square(t1.monret)) - square(avg(t1.monret))))
            *(sqrt(avg(square(t2.monret)) - square(avg(t2.monret))))),
current_timestamp,@MaxDate
            from Table1 t1  join Table1 t2  on t1.Date = traDate
            group by t1.index_id,t2.index_id

おすすめ記事