【问题标题】:How to achieve NUMBER(Oralce) data type functionality in snowflake?如何在雪花中实现 NUMBER(Oracle) 数据类型功能?
【发布时间】:2020-03-06 06:25:59
【问题描述】:

我有一个像 4.138 这样的 oracle 表列值 153.2809 128.113141081389 尝试使用表 DDL NUMBER(38,16) 将这些值加载到雪花中。所以现在雪花表中的值变为 4.1380000000000000 153.2809000000000000 128.1131410813890000 但我需要在 oracle 中将这些值加载到雪花中,而不是尾随 0。 如何做到这一点?

【问题讨论】:

  • 您确定这是存储问题而不仅仅是显示问题吗?您可能可以在显示它们时对其进行格式化。
  • 你的意思是显示问题。您是否有任何教程可以在列级别格式化以显示给用户?
  • 这是一个存储问题。我试图从雪花中提取数据,它的尾随为 0。4.1380000000000000153.2809000000000000
  • 如何提取它们?我不知道 Snowflake 但the formatting docs 说“通常,整数部分的前导零和小数部分的尾随零被替换为空格”所以这必须是可能的,并且应该是默认值。

标签: snowflake-cloud-data-platform sqldatatypes


【解决方案1】:

格式化固定位置的数字类型,使其不显示尾随零:

create or replace table TEST_NUMBERS (N number(38,16));
insert into TEST_NUMBERS(N) values (4.138), (153.2809), (128.113141081389);

select to_varchar(N, 'FMTM') as COMPACT_NUMBER from TEST_NUMBERS;

-- The "FM" toggles the "Fill Mode" to compact from the default, which is full.
-- The "TM" specifies using "Text Minimal".
-- It requires both Fill Mode of compact and Text Minimal set to suppress trailing
-- zeros on fixed-position numbers.

这当然只是为了显示和输出。如果您想了解规模和精度如何影响存储和计算,请参阅文档的这一部分:

https://docs.snowflake.net/manuals/sql-reference/data-types-numeric.html#impact-of-precision-and-scale-on-storage-size

【讨论】:

    【解决方案2】:

    好吧,一般来说,如果您想存储没有尾随零的数据,您应该按比例缩小。 NUMBER(38,3) 将存储 4.138,仅此而已。

    如果是出于显示目的,则只需根据https://docs.snowflake.net/manuals/sql-reference/sql-format-models.html#fixed-position-numeric-formats更改格式化字符串

    【讨论】:

    • 但我的要求是十进制数字会因记录而异:153.2809。所以我定义了 NUMBER(38,16)。那么 Snowflake NUMBER 数据类型不会像 Oracle NUMBER 数据类型那样工作?
    • 它的工作原理完全相同。甲骨文也用同样的比例保存,只是显示的问题。如果您解释一下您的用例到底是什么,我们可能会提供更好的帮助。
    • 十进制值在小数部分有占位符零。您可以强制转换为浮动以消除零。您可以转换为文本以绕过您的工具可能正在应用的格式。例如,select 1.23456789::number(38,16)::float::text, 1.23456789::number(38,16)::text;
    • 我不会那样做......由于缺乏精度,强制转换为浮动实际上可以改变值。
    猜你喜欢
    • 2021-09-13
    • 2020-10-12
    • 1970-01-01
    • 2020-11-21
    • 2018-07-08
    • 1970-01-01
    • 2013-09-27
    • 2020-09-29
    • 2020-07-01
    相关资源
    最近更新 更多