通过与'$'符号连接来更新money数据类型的列

时间:2013-05-07 11:39:42

标签: sql sql-server

我有一个名为TABLE_A的表,它有一个名为Unitcost的列,它是money数据类型,我必须通过((Cost / Pack)* Count更新Unitcost),其中这些Cost,Pack和Count是TABLE_A中的其他列

Note: Unitcost  is Money 
      Cost is  Money 
      Pack is int
      Count is nvarchar

TABLE_A最终输出应该与更新的Unitcost

一样
ID   |  Cost  |  Pack  | Count  |  Unitcost 
----------------------------------------------
01   | 12     | 1      |  1     |  $12

01   | 12     | 2      |  1     |  $6

01   | 40     | 4      |  2     |  $20

01   | 12     | 1      |  2     |  $24

' $'符号应该带有值的Unitcost列。我需要一个查询。请帮助。

3 个答案:

答案 0 :(得分:3)

简短的回答是否定的,你不能在钱栏中存储$。可以使用以下代码证明:

declare @UnitCost money = '$3,257.14'
select @UnitCost -- It works but symbols like $ and , are removed. 3257.14 is returned in this case.

下面的代码段不是您要求的,但可能只是给您一些想法:

declare @UnitCost money = '3257.14'
select '$' + convert(varchar, @UnitCost, 1) -- Returns $3,257.14 as varchar.

现在,我建议您远离money / smallmoney数据类型,尽管名称显示,它们实际上不会提供比十进制数据类型更多的财务计算值。 Money / smallmoney也被称为整数分裂。有关详细信息,请参阅Throw Your MONEY Away

答案 1 :(得分:0)

您无法使用$ value更新Unitcost列,该值具有money数据类型。 当你编写一个Select Query时,你需要将$附加到Unitcost列。您的选择查询将是这样的。

select ID ,    Cost,    Pack,   Count,  '$' + CONVERT(VARCHAR(50), Unitcost ) AS Unitcost from TABLE_A 

其他重要注意事项你的Unitcost列基于其他列乘法。不需要在tabel中创建一个Unitcost列,因为它基于其他列乘法。你也可以使用这个选择查询

select ID ,    Cost,    Pack,   Count,  '$' + CONVERT(VARCHAR(50), ((Cost/Pack)*Count) ) AS Unitcost from TABLE_A

希望这会对你有所帮助。

答案 2 :(得分:0)

UPDATE TABLE_A
SET Unitcost = ((Cost/Pack)*Count)

SELECT ID, Cost, Pack, Count, 
'$' + CAST(Unitcost AS VARCHAR(50)) AS Unitcost
FROM TABLE_A

这假设Pack永远不会为零。