鉴于仅在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
你能对这个用例更具体一点吗? 从表示中删除小数点有点不寻常,因为您将丢失有关比例的所有信息。 你假设总会有两位数吗? 如果是这样,您可以简化乘以100,然后在转换为字符串之前进行舍入。
请记住,货币数据类型最多可包含小数点后4位数。 对于原始解决方案或x100技巧,超过两位数的值可能无法正常工作。
这是魔术:
DataFormatString="{0:c0}
这将删除小数位。