我知道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之后给出了语法错误。我尝试了一个子查询,似乎也无法使语法正确。
答案 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位,这没有任何意义。