Sql Server 2005 で T-Sql のみを使用するという制約がある場合、money データ型から小数点を削除するには、(ここでは暗黙的に) varchar に変換してから小数点を置き換えるよりも良い方法はありますか?
これが私が現在持っているものです。
SELECT REPLACE(1.23, '.', ''), REPLACE(19.99, '.', '')
これは目的の 123 と 1999 を返しますが、もっと良い方法があるかどうか疑問に思っていました。何かご意見は?
Sql Server 2005 で T-Sql のみを使用するという制約がある場合、money データ型から小数点を削除するには、(ここでは暗黙的に) varchar に変換してから小数点を置き換えるよりも良い方法はありますか?
これが私が現在持っているものです。
SELECT REPLACE(1.23, '.', ''), REPLACE(19.99, '.', '')
これは目的の 123 と 1999 を返しますが、もっと良い方法があるかどうか疑問に思っていました。何かご意見は?
100 を掛けてから int に変換します。
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 データ型は、小数点以下 4 桁まで使用できることに注意してください。2 桁を超える値は、元のソリューションまたは x100 トリックで期待どおりに機能しない可能性があります。
ユースケースについてもう少し具体的に教えていただけますか?スケールに関するすべての情報が失われることを考えると、表現から小数点を削除するのは少し珍しいことです。常に2桁になると思いますか?その場合は、文字列に変換する前に 100 を掛けてから丸めることができます。
ここに魔法があります:
DataFormatString="{0:c0}
これにより、小数点以下が削除されます。