【发布时间】:2014-10-16 00:41:17
【问题描述】:
我有一个字段 varchar(100),其中包含 pence 作为数字,所有 35 个字符长,并且可能带有前导 -ve。根据下面的第二个和第三个字段,我需要以英镑和便士的形式返回。
我得到了不同的结果
SELECT
[Tax1_156_PaymentNotSubj]
,CAST(LEFT([Tax1_156_PaymentNotSubj],33) + '.' + RIGHT([Tax1_156_PaymentNotSubj],2) AS decimal(35,2)) AS NegCastDecs
,CONVERT(decimal(35,2), LEFT([Tax1_156_PaymentNotSubj],33) + '.' + RIGHT([Tax1_156_PaymentNotSubj],2)) AS NegConvDecs
,CAST((CAST([Tax1_156_PaymentNotSubj] AS integer)) / 10 AS decimal(35,2)) AS NegCastIntDecs
我在最后的双重演员领域缺少什么,最好使用哪种方法?
【问题讨论】:
-
wtf!!那应该是 Tax1_156_PaymentNotSubj 吗!!
-
cast('-000000000576235' as money) / 100? -
英国税务局为您服务 ;) 他们希望为所有可能发生的情况做好准备!
-
我不想显示货币符号或千位分隔符,只显示金额;此外,不推荐使用金钱,因为它不精确。
-
我通常不使用 money 数据类型,因为它有一些限制,并且更喜欢使用数字来代替。话虽这么说,money 数据类型既不被弃用也不不精确。它活得很好,而且一如既往地是一个精确的数字。 msdn.microsoft.com/en-us/library/ms179882.aspx
标签: sql sql-server sql-server-2008 casting