【问题标题】:Oracle: Migrating a col. with values, nulls and 0sOracle:迁移列。带有值、空值和 0
【发布时间】:2023-04-01 01:35:01
【问题描述】:

我正在将数据从一个数据库迁移到另一个数据库。

我有一个数字列。其中包含一些值、一些 0 和一些空值。我的直觉是将所有的 0 转换为 NULL。这将存储一个可选的、用户提供的号码。

有什么理由不将所有的 0 都转换为 NULL 吗?

【问题讨论】:

  • 未提供详细信息。它就像问“我需要存储一些数据。我应该使用什么数据类型?”一样模糊

标签: oracle null data-conversion


【解决方案1】:

issues with indexing NULLs(一般没有)。

如果您的意思是 0,请使用 0。改用 NULL 会更改您的排序顺序并影响算术(和比较)。 NULL 用于表示没有值。使用它们代替 0(一个值)是推动您的设计而不是......设计的微优化的一个很好的例子。

【讨论】:

  • 这栏。不会被索引,实际上很少使用 - 15k 条记录中约有 50 条有数据。但是在某些时候应用程序发生了变化,并且存储了 0 而不是 NULL。
  • 重点是:我更感兴趣的是数据的含义,而不是存储 NULL 而不是 0 带来的任何好处。
  • 我确实发现 count(field) 仅返回非空值的计数,因此这可能是不将 0 留在其中的一个很好的理由 - 值是美元金额,所以它可能有用对未来的数据进行平均、计数等。
【解决方案2】:

不将零转换为 null 的一个原因是它们在数学上的含义不同。

  1. 如果我有数字 (0,10,20),则它们的平均值为 10。如果我将零转换为空值,则平均值变为 15。
  2. 如果我有数字 5 和 0,将它们相加为 5。将 0 变为 null,然后将它们相加为 NULL。
  3. null、-5 和 10 的默认顺序是 (-5, 10, NULL),除非您使用 NULLS FIRST,在这种情况下您会得到 (NULL, -5, 10)。显然,零的排序是 (-5, 0, 10)。

因此,如果这些是用于数值函数的数字,那么您需要根据应用程序要求使用 NULL 和零(您没有给出)。

如果你给出了一些数字代表什么的指示,你可能会得到一个有用的答案。

【讨论】:

    猜你喜欢
    • 2023-03-31
    • 2010-12-12
    • 1970-01-01
    • 2011-04-23
    • 2016-01-22
    • 2016-05-14
    • 1970-01-01
    • 2013-05-08
    • 2019-09-03
    相关资源
    最近更新 更多