SQL Serverにmoneyデータ型があります。クエリで0.00を0に再フォーマットするにはどうすればよいですか?
通常のお金の変換は、個々のペニーを保持します:
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桁です。小数部分が必要ない場合や整数に変換したくない場合は、整数データ型を使用します。
おそらく、decimalまたはnumericデータ型を使用したいですか?
私はこれを見つけました approach 直接的で便利です。
CONVERT(VARCHAR(10)、CONVERT(MONEY、fieldname))AS PRICE
Moneyデータ型の本質的な制限にもかかわらず、それを既に使用している(または私が持っているように継承している)場合、質問に対する答えはDECIMALを使用することです。
あなたはこのように試すことができます:
SELECT PARSENAME('$'+ Convert(varchar,Convert(money,@MoneyValue),1),2)
これはフォーマットの問題のようです。
SQL Serverのマネータイプに関する限り、0 == 0.00
たとえばc#で0.00ではなく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」の場合、その列のコンシューマーがエラーになるため、問題でした。