加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

在SQL中如何计数小数位?

发布时间:2020-12-12 08:42:39 所属栏目:MsSql教程 来源:网络整理
导读:我有一列X,其中包含小数点的浮点,范围从0(无小数)到6(最大).我可以指望没有大小小于6位的浮点数.鉴于此,我如何制作一个新列,以便告诉我十进制数字后面有几位数字? 我看到一些线程表明我使用CAST将float转换为字符串,然后解析该字符串来计算小数点后面的字符
我有一列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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读