【问题标题】:ORACLE NUMBER(*,0) equivalent in POSTGRESQLPOSTGRESQL 中的 ORACLE NUMBER(*,0) 等效项
【发布时间】:2021-08-01 12:39:22
【问题描述】:

我在 ORACLE 中有一个表,其列的数据类型为 NUMBER(*,0)。根据我的理解,这意味着精度将为 38,因为这是精度的最大限制,并且比例值将为 0,这意味着小数点后不允许有数字,即将存储整数?

我有一个要求,我必须在 PostgreSQL 中创建同一个表。可以在 PostgreSQL 中写 NUMERIC(*,0) 吗?如果不是,那么 PostgreSQL 相当于 NUMBER(*,0)?

【问题讨论】:

  • 我会使用没有精度的数字
  • 如果我只写 NUMERIC,它不会以任何精度和比例创建吗?我想要一个 0 的比例 @Philippe
  • 您应该调查您在该列中存储的内容。也许 Postgres 中的 bigint 就足够了?

标签: sql postgresql oracle database-migration sqldatatypes


【解决方案1】:

Postgres 支持任意精度的数值。 Oracle number 类型具有高达 38 位的精度。所以,类型:

number(*, 0)

真的是:

number(38, 0)

Postgres 中的等价物是:

numeric(38)

或:

numeric(38, 0)

但是,Postgres supports ridiculously large precisions and scales。因此,如果您指定: 数字

您将能够代表您一生中可能遇到或需要的任何数字。

【讨论】:

    【解决方案2】:

    在 oracle 中数字(精度、小数位数)

    number(precision,scale)
    numeric (precision,scale)
    

    precision = 如果未指定精度,则列存储给定值

    scale = 如果未指定比例,则比例为零

    oracle number

    在 sql、postgresql 中

    numeric(precision,scale)
    

    precision = 最大长度为 38,sql 中默认值为 18

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-28
      • 2022-01-17
      • 2012-10-22
      • 1970-01-01
      • 2011-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多