获取最大十进制位置在浮点SQL Server 2012中

时间:2015-03-26 13:51:01

标签: sql-server floating-point subquery

我知道float存储为二进制文件,并且是SQL Server中的一种表示形式。但是,我需要在表格中的浮点列中表示的最大小数位数。我发现this link解释了如何获得每行的小数位数。但是,我无法弄清楚如何获得该结果的最大值。从本质上讲,这就是我想要做的事情。

SELECT MAX
       (Decimals = CASE Charindex('.', [QUANTITY])
                    WHEN 0 THEN 0
                    ELSE
   Len (Cast(Cast(Reverse(CONVERT(VARCHAR(50), [QUANTITY], 128)
                     ) AS FLOAT) AS BIGINT))
                  END)
FROM   [schema].[table]

这在END之后给出了语法错误。我尝试了一个子查询,似乎也无法使语法正确。

3 个答案:

答案 0 :(得分:1)

您可以将convert()功能与style = 128一起使用,但您可以读到这是[Included for legacy reasons and might be deprecated in a future release]。另一种方法是使用str()函数:

declare @temp_data table (quantity float)

insert into @temp_data
select 1.55552 union all
select 0.545365788

;with cte as (
    select convert(varchar(max), quantity, 128) as quantity from @temp_data
)
select 
    max(
        case
            when charindex('.', quantity) = 0 then 0
            else len(quantity) - charindex('.', quantity)
        end
    )
from cte

;with cte as (
    select rtrim(ltrim(str(quantity, 100, 100))) as quantity from @temp_data
)
select
    max(
        case
            when charindex('.', quantity) = 0 then 0
            else len(cast(cast(reverse(quantity) as float) as bigint))
        end
    )
from cte

答案 1 :(得分:0)

看起来这就是答案......

SELECT MAX
       (CASE Charindex('.', [QUANTITY])
                    WHEN 0 THEN 0
                    ELSE
   Len (Cast(Cast(Reverse(CONVERT(VARCHAR(50), [QUANTITY], 128)
                     ) AS FLOAT) AS BIGINT))
                  END)
FROM   [schema].[table]

对不起每个人。我以为我在我的许多推导中尝试了这一点,但显然没有,或者我有一个错字。如果有人可以解释为什么把'&34; Decimals =" in使它无效它会帮助我理解为什么。

答案 2 :(得分:0)

SELECT   MAX ( CASE Charindex('.', <ColumnName>)
                  WHEN 0
                     THEN
                        0
                     ELSE
                        LEN( CAST( CAST( REVERSE( CONVERT( varchar(50), <ColumnName>, 128 ) ) AS float) AS bigint))
               END
             ) AS [FloatPrecision]
       , <ColumnName>
   FROM <schema>.<tablename>
   GROUP BY <ColumnName>
   ORDER BY [FloatPrecision] DESC;

此解决方案为您提供浮点精度,包括从最高精度到最小精度的实际值。就我而言,我的一些费用值小数点后11位,这没有任何意义。