在SQL中如何计数小数位?

前端之家收集整理的这篇文章主要介绍了在SQL中如何计数小数位?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一列X,其中包含小数点的浮点,范围从0(无小数)到6(最大).我可以指望没有大小小于6位的浮点数.鉴于此,我如何制作一个新列,以便告诉我十进制数字后面有几位数字?

我看到一些线程表明我使用CAST将float转换为字符串,然后解析该字符串来计算小数点后面的字符串的长度.这是最好的方式吗?

解决方法

你可以使用这样的东西:
declare @v sql_variant

set @v=0.1242311

select sql_VARIANT_PROPERTY(@v,'Scale') as Scale

这将返回7.

我试图使上面的查询使用一个float列,但无法使其按预期工作.它只适用于sql_variant列,如下所示:http://sqlfiddle.com/#!6/5c62c/2

所以,我继续寻找另一种方式,并建立在这个answer,我得到了:

SELECT value,LEN(
    CAST(
         CAST(
              REVERSE(
                      CONVERT(VARCHAR(50),value,128)
                     ) AS float
             ) AS bigint
        )
   ) as Decimals
FROM Numbers

这是一个sql小提琴来测试这个:http://sqlfiddle.com/#!6/23d4f/29

为了解释这个小怪物,这里是一个修改版本,当浮点值没有小数部分时,它将处理这种情况:

SELECT value,Decimals = CASE Charindex('.',value)
                    WHEN 0 THEN 0
                    ELSE
           Len (
            Cast(
             Cast(
              Reverse(CONVERT(VARCHAR(50),128)) AS FLOAT
                 ) AS BIGINT
                )
               )
                    END
FROM   numbers

这是附带的sql小提琴:http://sqlfiddle.com/#!6/10d54/11

猜你在找的MsSQL相关文章