鑑於在Sql Server 2005中僅使用T-Sql的約束,是否有更好的方法來從貨幣數據類型中除去轉換爲varchar的小數點(這裏是隱含的)然後更換小數點?T-Sql從貨幣數據類型中刪除小數點
這是我目前的。
SELECT REPLACE(1.23, '.', ''), REPLACE(19.99, '.', '')
它返回所需的123和1999,但我想知道是否有更好的方法。有什麼想法嗎?
鑑於在Sql Server 2005中僅使用T-Sql的約束,是否有更好的方法來從貨幣數據類型中除去轉換爲varchar的小數點(這裏是隱含的)然後更換小數點?T-Sql從貨幣數據類型中刪除小數點
這是我目前的。
SELECT REPLACE(1.23, '.', ''), REPLACE(19.99, '.', '')
它返回所需的123和1999,但我想知道是否有更好的方法。有什麼想法嗎?
乘以100,然後轉換爲int。
你可以更具體一點關於用例嗎?從表示中刪除小數點是有點不尋常的,因爲您將失去有關比例的所有信息。你是否假設總會有兩位數字?如果是這樣,你可以簡化乘以100,然後轉換爲字符串。
請記住,貨幣數據類型最多可以有4位數字。對於原始解決方案或x100技巧,超過兩位數字的值可能無法按預期工作。
您永遠不應該使用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
這裏是魔法:
DataFormatString="{0:c0}
這將刪除小數。
最初的約束是它只能在T-Sql中。 DataFormatString是一個.Net的東西。 – Pete 2009-05-20 15:16:16