SQL Server如何骗钱类型的小数位数? [重复](SQL Server how to ge

2019-11-05 06:01发布

这个问题已经在这里有答案 :

CostPricet1是货币类型。

在列中的数据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上不允许我旗萎靡不振,但让我编辑的问题,而不是,那么:

这个问题不重复,以这一个 。 现有的问题是对“浮动”数据类型而这一次的“钱”,转换“钱”为“VARCHAR”像“现有雁”永远返回相同的小数位数,因此它不会回答这个题。

Answer 1:

你可以(independantly从区域设置):

  • 乘以10000值
  • convert结果为整数
  • convert整数为字符串
  • 加4个前导零到左侧(以防万一......)
  • 采取从4个字符right (前位小数)
  • replace由一个空白字符的每个零
  • 使用删除尾随空白rtrim
  • 返回剩余的字符串的长度

为了把这个表达式,这将是:

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


Answer 2:

尝试这个

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 


文章来源: SQL Server how to get money type's decimal digits? [duplicate]