2008-08-06 40 views
7

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

ここに私が現在持っているものがあります。

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

希望の123と1999を返しますが、より良い方法があるかどうか疑問に思っていました。何かご意見は?

答えて

6

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

0

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

0

貨幣のデータタイプは、小数点以下4桁までです。 2桁以上の値は、元のソリューションまたはx100のトリックでは期待どおりに機能しない可能性があります。

3

貨幣の値を格納するために貨幣データ型を決して使用するべきではありません。計算を行うと、結果が切り捨てられます。私は

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

0

ここでは魔法です:

DataFormatString="{0:c0} 

これは、小数点以下を削除します。

+1

元の制約は、T-SQLでしかないということでした。 DataFormatStringは.Netのものです。 – Pete

関連する問題