没有精度的Oracle数字类型 - 我怎么知道它是否是整数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了没有精度的Oracle数字类型 - 我怎么知道它是否是整数相关的知识,希望对你有一定的参考价值。

我们供应商的数据库包含所有数字的数字类型,包括整数和十进制数。从字面上看,每个数字类型列都创建为NUMBER,没有精度和比例。

这是一个很大的问题,因为我们需要将这些列映射到目标系统上的正确数据类型,我们正在将这些表中的数据加载到。

我们需要知道数字是整数还是小数。

除了进行随机抽样/数据分析之外,是否可以推断出正确的数据类型?

更新:我接受了以下答案和@Bohemian的建议。除此之外,我将使用SAMPLE子句对表进行随机抽样,因为我的源表很庞大(数十亿行)。

SELECT
    MAX(CASE WHEN col1 IS NOT NULL AND col1 <> round(col1, 0) then 1 else 0 end) as col1,
    MAX(CASE WHEN col2 IS NOT NULL AND col2 <> round(col2, 0) then 1 else 0 end) as col2
FROM TABLE
SAMPLE(0.05)

如果我只想采样X行,请使用下面的公式来SAMPLE(N):

Xrows * 100 / table_rows_total

答案

您可以尝试选择每个FIELD,并查看FIELD的所有值是否等于ROUND(FIELD,0)。如果是,则该字段应为整数。如果没有,十进制。

以上是关于没有精度的Oracle数字类型 - 我怎么知道它是否是整数的主要内容,如果未能解决你的问题,请参考以下文章

ORACLE 中NUMBER类型默认的精度和Scale问题

如何获得数字列的确切类型,包括。规模和精度?

Oracle number类型查询精度丢失的解决方法

说知道oracle中int类型和number类型区别

在oracle中number类型的字段长度是啥意思

oracle数据库 时间 TIMESTAMP(6)这是啥类型啊 怎么也插不进数据