10

Sql Server 2005 で T-Sql のみを使用するという制約がある場合、money データ型から小数点を削除するには、(ここでは暗黙的に) varchar に変換してから小数点を置き換えるよりも良い方法はありますか?

これが私が現在持っているものです。

SELECT REPLACE(1.23, '.', ''), REPLACE(19.99, '.', '')

これは目的の 123 と 1999 を返しますが、もっと良い方法があるかどうか疑問に思っていました。何かご意見は?

4

5 に答える 5

7

100 を掛けてから int に変換します。

于 2008-08-06T19:37:14.940 に答える
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

于 2008-08-08T13:53:26.377 に答える
0

money データ型は、小数点以下 4 桁まで使用できることに注意してください。2 桁を超える値は、元のソリューションまたは x100 トリックで期待どおりに機能しない可能性があります。

于 2008-08-06T20:59:36.880 に答える
0

ユースケースについてもう少し具体的に教えていただけますか?スケールに関するすべての情報が失われることを考えると、表現から小数点を削除するのは少し珍しいことです。常に2桁になると思いますか?その場合は、文字列に変換する前に 100 を掛けてから丸めることができます。

于 2008-08-06T19:38:38.993 に答える
0

ここに魔法があります:

DataFormatString="{0:c0}

これにより、小数点以下が削除されます。

于 2009-05-20T06:02:47.553 に答える