获取最小和最大小数位数值

时间:2015-08-20 06:38:33

标签: sql sql-server

我在sql server中有float数据类型列,我需要得到最小小数和最大小数。

Here is SQL Fiddle  我正在使用

Len (Cast(Cast(Reverse(CONVERT(VARCHAR(50), value, 128)
                     ) AS FLOAT) AS BIGINT))

哪个工作得很好,但是当价值为负时,例如-0.061,它会抛出错误Error converting data type varchar to float. 所以对于alter我搜索并发现有函数名PARSENAME(@var,1),它也适用于负数,但是这个函数在十进制值之后返回,返回类型是nchar

例如:如果float值为-0.061,则它将返回返回类型nchar的061所以我不能使用len函数来获取其长度。

那么如何通过使用小提琴或使用上述功能来实现此功能。

4 个答案:

答案 0 :(得分:4)

尝试使用ABS()功能

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

答案 1 :(得分:1)

我想使用ABS()函数就足够了。不应该吗?

  

返回绝对(正)值的数学函数   指定的数字表达式。

SELECT value
    , Decimals = CASE CHARINDEX('.', value)
        WHEN 0 THEN 0
        ELSE LEN(CAST(CAST(REVERSE(CONVERT(VARCHAR(50), ABS(value), 128)) AS FLOAT) AS BIGINT))
    END
FROM numbers;

答案 2 :(得分:1)

这会奏效。 当它是负数时,只需将简单值替换为-value即 CASE WHEN值< 0 THEN -value ELSE value END

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

答案 3 :(得分:0)

要删除 - 符号,请使用ABS功能。 ABS(价值)代替价值