首页 > 解决方案 > 如何列出数据库中具有最大小数位的所有浮点列?

问题描述

我正在尝试列出数据库中具有最大小数位的所有浮点列。我的最终目标是以正确的比例和精度将这些浮点列转换为十进制。

我可以使用下面列出所有浮动列

SELECT A.table_name, 
       column_name, 
       data_type 
FROM   DB1.information_schema.columns A 
       INNER JOIN DB1.information_schema.tables B 
               ON A.table_name = B.table_name 
WHERE  table_type = 'BASE TABLE' 
       AND data_type = 'Float' 
ORDER  BY A.table_name 

并查看单个浮点列的最大小数位,如下所示

SELECT MAX
       (CASE Charindex('.', COLUMN1)
                    WHEN 0 THEN 0
                    ELSE
   Len (Cast(Cast(Reverse(CONVERT(VARCHAR(50), COLUMN1, 128)
                     ) AS FLOAT) AS BIGINT))
                  END) AS MAX_LENGTH
FROM   DB1.dbo.TABLE1

我正在尝试将两者的结果结合起来,以便得到以下结果。

table_name, 
column_name, 
data_type,
MAX_LENGTH

如何动态获取第二个查询中所有列的结果并将其与第一个查询连接?

谢谢

标签: sql-serversql-server-2008

解决方案


你试图做的事情根本无法解决。 Float不应该存储精确值,为此目的decimal/numeric类型存在。Float非常适合存储不适合任何“精确”类型的巨型值。

我给你一个例子。您可以轻松地适应 float 这些值:

create table dbo.fl(col float);

insert into dbo.fl
values(2e100), (2e-100);

您可以发明的任何解决方案都将因这些值而失败。的概念float是:它可以存储无法存储在其他类型中的巨大值。


推荐阅读