【问题标题】:how to find out the number of digits after a decimal point in sql server 2008如何在sql server 2008中找出小数点后的位数
【发布时间】:2017-01-06 05:43:13
【问题描述】:

如何在sql server 2008中找出小数点后的位数。

假设值为 10.12365479

我想知道小数点后的位数。

注意:该列的类型为 FLOAT。

【问题讨论】:

标签: sql sql-server sql-server-2008


【解决方案1】:

我会使用 STR + REPLACE + LEN + CHARINDEX 函数。检查下面的中间结果以了解其工作原理。

declare @V float = 10.12365479;

SELECT
    @V AS v
    ,STR(@V, 50, 16) AS v_str
    ,REPLACE(STR(@V, 50, 16), '0', ' ') AS v_replace
    ,LEN(REPLACE(STR(@V, 50, 16), '0', ' ')) AS v_len
    ,CHARINDEX('.', STR(@V, 50, 16)) AS v_idx

    ,LEN(REPLACE(STR(@V, 50, 16), '0', ' ')) -
    CHARINDEX('.', STR(@V, 50, 16)) AS decimal_digits

结果为 8

+-------------+----------------------------------------------------+----------------------------------------------------+-------+-------+----------------+
|      v      |                       v_str                        |                     v_replace                      | v_len | v_idx | decimal_digits |
+-------------+----------------------------------------------------+----------------------------------------------------+-------+-------+----------------+
| 10.12365479 |                                10.1236547900000000 |                                1 .12365479         |    42 |    34 |              8 |
+-------------+----------------------------------------------------+----------------------------------------------------+-------+-------+----------------+

显然,答案通常是 16(可能的最大值),因为您的浮点值将表示为 10.1236547899999999

【讨论】:

  • 它在考虑浮点变量时起作用..但遗憾的是它不适用于表中的数据。我用我的列名替换了变量名..不工作..无论如何都要感谢队友。
  • @user1172910,“不工作”不是对问题的有用描述。如果您提供更多详细信息,也许有人能够找出解决问题的方法。
  • 我很抱歉 Vladimir Baranov..如果您在列类型为 float 的表上应用相同的查询,请。这会给你一个更好的图片。非常感谢。
猜你喜欢
  • 2013-12-05
  • 1970-01-01
  • 2015-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-18
  • 2010-11-21
  • 1970-01-01
相关资源
最近更新 更多