23

SQL Server に money データ型があります。クエリで 0.00 を 0 に再フォーマットするにはどうすればよいですか?

4

9 に答える 9

32

通常の通貨換算では、個々のペニーが保持されます。

SELECT convert(varchar(30), moneyfield, 1)

最後のパラメーターは、出力形式がどのように見えるかを決定します。

0 (デフォルト) 小数点の左側の 3 桁ごと、および小数点の右側の 2 桁ごとにカンマはありません。たとえば、4235.98 です。

1 小数点の左側に 3 桁ごと、小数点の右側に 2 桁ごとにコンマ。たとえば、3,510.92 です。

2 小数点の左側の 3 桁ごと、および小数点の右側の 4 桁ごとにカンマはありません。たとえば、4235.9819 です。

ペニーを切り捨ててポンドで数えたい場合は、最も近いポンドへの丸め、最小の整数ポンドへの下限、または上限を使用してポンドを切り上げることができます。

SELECT convert(int, round(moneyfield, 0))
SELECT convert(int, floor(moneyfield))
SELECT convert(int, ceiling(moneyfield))
于 2009-02-10T14:27:18.913 に答える
3

それをintにキャストすると役に立ちますか?お金は小数点以下の桁数を持つことを意味します...

DECLARE @test AS money
SET @test = 3
SELECT CAST(@test AS int), @test
于 2009-02-10T13:44:15.460 に答える
3

まず第一に、moneyデータ型は絶対に使用しないでください。計算を行うと、切り捨てられた結果が得られます。以下を実行して、私が何を意味するかを確認してください

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

さて、あなたの質問に答えるために(少し曖昧でした)、moneyデータ型は常に小数点以下2桁です。小数部分が必要ない場合、またはintに変換しない場合は、整数データ型を使用します。

おそらく、10進数または数値のデータ型を使用したいですか?

于 2009-02-10T13:45:08.220 に答える
1

money データ型の本質的な制限にもかかわらず、既に使用している (または私が持っているように継承している) 場合、質問に対する答えは DECIMAL を使用することです。

于 2010-01-29T00:31:12.777 に答える
1

次のように試すことができます:

SELECT PARSENAME('$'+ Convert(varchar,Convert(money,@MoneyValue),1),2)
于 2013-12-24T05:14:48.363 に答える
0

これは私にはフォーマットの問題のように見えます。
SQLServerのお金の種類に関する限り0==0.00

0.00ではなくc#で0を表示しようとしている場合は、文字列に変換して、必要に応じてフォーマットする必要があります。(または切り捨てます。)

于 2009-02-10T13:46:00.947 に答える
0

私もこの問題を抱えていて、しばらくつまずきました。0.00 を 0 として表示し、それ以外の場合は小数点を維持したかったのです。以下は機能しませんでした:

CASE WHEN Amount= 0 THEN CONVERT(VARCHAR(30), Amount, 1) ELSE Amount END

結果の列が強制的に MONEY 列になったためです。それを解決するために、以下が機能しました

CASE WHEN Amount= 0 THEN CONVERT(VARCHAR(30), '0', 1) ELSE CONVERT (VARCHAR(30), Amount, 1) END

私の最終的な宛先列は VARCHAR(30) であり、金額が「0」ではなく「0.00」である場合、その列の消費者はエラーになるため、これは重要でした。

于 2015-03-20T14:39:31.050 に答える
0

どちらかを使用できます

SELECT PARSENAME('$'+ Convert(varchar,Convert(money,@MoneyValue),1),2)

また

SELECT CurrencyNoDecimals = '$'+ LEFT( CONVERT(varchar, @MoneyValue,1),    
       LEN (CONVERT(varchar, @MoneyValue,1)) - 2)
于 2012-03-20T18:47:28.263 に答える