SQL Server如何获取货币类型的小数位数?

时间:2018-10-08 11:40:50

标签: sql-server sql-server-2008

CostPrice的列t1是货币类型。

CostPrice列中的数据如下:

141.1938
0.00
147.1041
119.592
1.23

我使用此sql获取十进制数字:

select distinct len(CostPrice-floor(CostPrice))-2 from t1;

但是结果只有2,这是不对的,实际上结果应该是2,3,4。

那么如何修复SQL?

已添加

StackOverflow不允许我标记该标记,而是要求我编辑问题,所以:

  

此问题不是this one的重复项。现有的问题在“ float”数据类型上,而这个问题在“ money”上,将“ money”转换为“ varchar”(如在“ anser anser”中一样)将始终返回相同的小数位数,因此无法回答题。

2 个答案:

答案 0 :(得分:1)

尝试一下

DECLARE 
@money money = 141.1938

 SELECT 
    @money
   ,SUBSTRING(CONVERT(varchar(20),@money,2), CHARINDEX('.', CONVERT(varchar(20),@money,2)) + 1, LEN(CONVERT(varchar(20),@money,2))) as RESULT 

答案 1 :(得分:1)

您可以(独立于区域设置):

  • 将值乘以10,000
  • convert将结果转换为整数
  • convert整数为字符串
  • 在左侧添加4个前导零(以防万一...)
  • right(前小数位)中提取4个字符
  • replace每个零都用一个空白字符
  • 使用rtrim删除尾随空格
  • 返回剩余字符串的长度

要将其放在表达式中,应为:

LEN(RTRIM(REPLACE(RIGHT('0000' + CONVERT(varchar(20), CONVERT(int, CostPrice*10000)), 4), '0', ' ')))