• Oracle中的decimal与Number区别


    一、DECIMAL类型详细
    Oracle只是在语法上支持decimal类型,但是在底层实际上它就是number类型,支持decimal类型是为了能把数据从Oracle数据库移到其他数据库中(如DB2等)。

    因为decimal在Oracle底层就是number类型,所以就当number类型使用就可以了,如果需要对这种字段类型转为char类型可以用to_char函数对其转换。

    decimal类型从根本上说应该是数字类型的,因为oracle内部的数据类型,对于数字只有number类型,都当数字类型进行处理即可。decimal(8,2)代表数字总共8位长度,小数部分是2位。范围是8位,精确到小数点后2位,并四舍五入,即存6位整数,两位小数。也就是最大值可以是999999.99,可存放2位小数。Oracle中,可以使用to_char函数对数字进行转换,使它变成字符类型.

    二、NUMBER类型详细

    在Oracle中Number类型可以用来存储0,正负定点或者浮点数,可表示的数据范围在

    1.0 * 10(-130) —— 9.9...9 * 10(125) {38个9后边带88个0}
    的数字,当Oracle中的数学表达式的值>=1.0*10(126)时,Oracle就会报错。

    表示

    作用

    说明

    Number(p, s)

    声明一个定点数

    p(precision)为精度s(scale)表示小数点右边的数字个数,精度最大值为38,scale的取值范围为-84到127

    Number(p)

    声明一个整数

    相当于Number(p, 0)

    Number

    声明一个浮点数

    其精度为38,要注意的是scale的值没有应用,也就是说scale的指不能简单的理解为0,或者其他的数。

    定点数的精度(p)和刻度(s)遵循以下规则:

    当一个数的整数部分的长度> p-s 时,Oracle就会报错

    当一个数的小数部分的长度> s 时,Oracle就会舍入。

    当s(scale)为负数时,Oracle就对小数点左边的s个数字进行舍入。

    当s > p时, p表示小数点后第s位向左最多可以有多少位数字,如果大于p则Oracle报错,小数点后s位向右的数字被舍入.

    NUMBER类型细讲

    Oracle number datatype 语法:NUMBER[(precision [, scale])]
    简称:precision --> p
    scale --> s

    NUMBER(p, s)
    范围:1 <= p <=38, -84 <= s <= 127
    保存数据范围:-1.0e-130 <= number value < 1.0e+126
    保存在机器内部的范围:1 ~ 22 bytes

    有效位:从左边第一个不为0的数算起的位数。
    s的情况:
    s > 0
    精确到小数点右边s位,并四舍五入。然后检验有效位是否<= p。
    s < 0
    精确到小数点左边s位,并四舍五入。然后检验有效位是否<= p + |s|。
    s = 0
    此时NUMBER表示整数。

    eg:
    Actual Data Specified As Stored As
    ----------------------------------------
    123.89 NUMBER 123.89
    123.89 NUMBER(3) 124
    123.89 NUMBER(6,2) 123.89
    123.89 NUMBER(6,1) 123.9
    123.89 NUMBER(4,2) exceeds precision (有效位为5, 5 > 4)
    123.89 NUMBER(6,-2) 100
    .01234 NUMBER(4,5) .01234 (有效位为4)
    .00012 NUMBER(4,5) .00012
    .000127 NUMBER(4,5) .00013
    .0000012 NUMBER(2,7) .0000012
    .00000123 NUMBER(2,7) .0000012
    1.2e-4 NUMBER(2,5) 0.00012
    1.2e-5 NUMBER(2,5) 0.00001
    123.2564 NUMBER 123.2564
    1234.9876 NUMBER(6,2) 1234.99
    12345.12345 NUMBER(6,2) Error (有效位为5+2 > 6)
    1234.9876 NUMBER(6) 1235 (s没有表示s=0)
    12345.345 NUMBER(5,-2) 12300
    1234567 NUMBER(5,-2) 1234600
    12345678 NUMBER(5,-2) Error (有效位为8 > 7)
    123456789 NUMBER(5,-4) 123460000
    1234567890 NUMBER(5,-4) Error (有效位为10 > 9)
    12345.58 NUMBER(*, 1) 12345.6
    0.1 NUMBER(4,5) Error (0.10000, 有效位为5 > 4)
    0.01234567 NUMBER(4,5) 0.01235
    0.09999 NUMBER(4,5) 0.09999

    三、Oracle语句距离

    项目中的语句:

    SELECT (CASE WHEN tt1.statistics_date is not null THEN tt1.statistics_date ELSE tt2.statistics_date END) AS statistics_date, NVL(tt1.actuser,0) AS actuser, NVL(tt2.new_user,0) AS new_user
            FROM
            (
              SELECT t.statistics_date, SUM(t.actuser) AS actuser FROM pdt_stat_act_1133_i t WHERE t.statistics_date like '2013-04%' and t.statistics_month = '2013-04' GROUP BY t.statistics_date
            ) tt1
            FULL JOIN
            (
              SELECT t2.statistics_date, SUM(t2.new_user) OVER(ORDER BY t2.statistics_date) AS new_user FROM (SELECT statistics_date AS statistics_date, SUM(new_user) AS new_user FROM pdt_stat_newuser_1133_i WHERE statistics_date like '2013-04%' GROUP BY statistics_date) t2
            ) tt2 ON tt1.statistics_date = tt2.statistics_date
  • 相关阅读:
    【每日一具12】超级好用的录屏软件,赶紧收藏
    【每日一具12】超级好用的录屏软件,赶紧收藏
    python之K-邻近算法/kNN(附上注解代码)
    数据挖掘领域十大经典算法之—K-邻近算法/kNN(超详细附代码)
    【每日一具11】一款图片文件漂白软件
    python实现全北京的公交路线动图【一定收藏】
    【每日一具11】一款图片文件漂白软件
    一个典型的加了 SAP 注解的 OData 服务明细分析
    如何以 mock server 的方式本地启动 SAP UI5 应用,使它不连接服务器端 OData 服务
    深入掌握 SAP Fiori Elements 工作原理系列之二:如何给 Fiori Elements 应用添加自定义按钮
  • 原文地址:https://www.cnblogs.com/jijm123/p/16201832.html
Copyright © 2020-2023  润新知