SQL Server に money データ型があります。クエリで 0.00 を 0 に再フォーマットするにはどうすればよいですか?
9 に答える
通常の通貨換算では、個々のペニーが保持されます。
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))
それをintにキャストすると役に立ちますか?お金は小数点以下の桁数を持つことを意味します...
DECLARE @test AS money
SET @test = 3
SELECT CAST(@test AS int), @test
まず第一に、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進数または数値のデータ型を使用したいですか?
money データ型の本質的な制限にもかかわらず、既に使用している (または私が持っているように継承している) 場合、質問に対する答えは DECIMAL を使用することです。
次のように試すことができます:
SELECT PARSENAME('$'+ Convert(varchar,Convert(money,@MoneyValue),1),2)
これは私にはフォーマットの問題のように見えます。
SQLServerのお金の種類に関する限り0==0.00
0.00ではなくc#で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」である場合、その列の消費者はエラーになるため、これは重要でした。
どちらかを使用できます
SELECT PARSENAME('$'+ Convert(varchar,Convert(money,@MoneyValue),1),2)
また
SELECT CurrencyNoDecimals = '$'+ LEFT( CONVERT(varchar, @MoneyValue,1),
LEN (CONVERT(varchar, @MoneyValue,1)) - 2)