【问题标题】:Find float column max scale and precision查找浮点列的最大比例和精度
【发布时间】:2021-04-05 19:57:52
【问题描述】:

我在 Teradata 中有一个数据类型为 float 的列。我想找到该列的最大精度和比例。

注意:我的专栏的比例部分大部分地方都是10位以上。

样本数据

123.12321323002
13123213.13200003
33232.213123001

我需要的输出是 精度 19(比例 + 13123213 的长度),比例为 11(12321323002 的长度) 或

8(长度为 13123213),11(长度为 12321323002)。

我试图找到他们购买将列转换为 varchar 并根据 '.' 拆分它们。并将整数和小数部分设为 2 列,然后找到 2 列的最大长度。但是当我选择数据时,Teradata 会四舍五入比例部分。所以在那之后,如果我将它们转换为 char,我得到的 scale 部分的价值会变小。

例如:

组织数据:1234.12312000123101

当我从 Teradata 中选择时的数据:1234.12312000123

【问题讨论】:

    标签: sql teradata teradatasql


    【解决方案1】:

    评论有点长。

    Teradata 使用 IEEE 格式来表示实数/浮点值。这给出了 15-17 位的精度。唉,您需要 19 位数字,所以您想要的值没有存储在数据库中。您无法恢复它们。

    你可以做的是修复数据库,所以它使用numeric/decimal/number。这支持您想要的:NUMERIC(19, 11)。然后您需要重新加载数据,以便将其正确存储在数据库中。

    【讨论】:

    • TL;DR - 永远不要使用浮点数,问题大于任何可能的好处。
    • @Andrew 。 . .当值的 范围 超出可以以固定长度格式表示的任何值时,浮点数就会占有一席之地。在现实世界的数据库中,这是非常非常少需要的。在业务数据库中,也许永远不会。
    • 很公平。我只是无法忍受不可预测性,浮点数缺乏保证的准确性。但也许那只是因为我有点强迫症......
    【解决方案2】:

    当您需要没有预定义比例的高精度时,只需切换到 NUMBER 数据类型,它是 DECIMAL 和 FLOAT 的混合体。

    精确数字,至少 38 位精度,无预定义比例,范围为 1E-130 .. 1E125。

    漂浮在类固醇上:-)

    【讨论】:

      猜你喜欢
      • 2018-07-09
      • 2023-03-15
      • 1970-01-01
      • 2013-03-04
      • 2015-02-02
      • 1970-01-01
      • 2019-01-14
      • 2011-05-17
      • 2017-03-29
      相关资源
      最近更新 更多