Oracle中的数值处理相关函数介绍

前端之家收集整理的这篇文章主要介绍了Oracle中的数值处理相关函数介绍前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

转载请注明出处:http://www.jb51.cc/article/p-pjthgokh-beo.html,谢谢!


1、概述

Oracle函数处理三种类型的数值:单值、值组和值列表。

这些函数跟串函数一样,用来更改数值或者是返回数值相关的信息。

数值类型区分如下:

  • 单值:只是一个数值,如常数值、PL/sql等中的变量。数据库的一列和一行的一个数字等。Oracle的单值函数通常通过计算来更改这些值。
  • 值组:一系列数据行中的某一列的所有数值数据。Oracle值组函数提供的是整个组的信息,如求某一列的平均数。
  • 值列表:可能是一列数字,如1、2、3、4.5、PL\sql等中的变量、或是列中的列值(类型为列表型)。

函数表示方法

FUNCTION(value[,option])

[表示可选参数]。

如果一个列值不包含任何值,则此时是NULL而不是0,他是空的,在后面这会对函数造成一定的影响,后面会详细介绍。

请注意下面很多示例都是用一个常量来演示,实际使用中,直接将其替换为列即可。


2、单值函数

单值函数一般都比较简单,但是很常用。

2.1、四则运算

他们分别是“+”,“-”,“*”,“/”,很简单,大家都会,不多说,看下简单示例:

      1. select 3+2,-*/2 from users;

    结果很显然:5 1 6 1.5

    2.2、NULL

    我们想将上面的sql改为与NULL一起运算看下结果如何:

    1. +NULL-*/NULL 结果将返回:NULL NULL NULL NULL

    2. 对,他们的结果都为空,事实上,任何包含NULLDE算术运算都会得到结果NULL

    3. 所以,NULL是不同于0的,NULL不应用来计算。

    4. 那么,这也解释了WHERE子句中,不能将NULL与=一起使用:因为如果x=y时,若他们都是NULL,但都是未知的,而实际他们野可能是任何值,使用=是没有意义的。

    5. 2.3NVL:空值置换

    6. 针对上面的NULL问题,其中一种解决方法就是使用NVL函数

    7. 语法:

    8. NVL(value,substitute)

    9. 如果valueNULL,则函数结果为substitute,反之,结果为value

    10. 虽然值为NULL,是未知的,但很多时候可以作一些合理的假设。比如:某列表示某员工的工资,想要计算整个部门一月需要发多少工资,显然是可以预估的,比如采用平均值,这是就可以将NULL值置换为那个平均值,

    11. 可以看下使用例子:

    12.  nvl(123),nvl(0)   结果输出123 0

    13. NVL的使用不限于数值,他们同样可以适用于其他数据类型,但是要保证value参数和substitute参数类型是相同的。

    14. NVL2

    15. 类似的函数NVL2,语法:

    16. NVL2(e1,e2,e3)

    17. 此处e1永远不会被返回,如果e1不为NULL,就返回e2,反之,返回e3

    18. 2.4ABS:绝对值

    19. 绝对值这个概念很简单,也不多说了。

    20. 语法:

    21. ABvalue)
    22.  
    23.  
    24. 2.5CEIL

    25. CEIL用于产生大于或等于当前值的最小整数,当原来那个值为负数时,要留意其结果,看下面示例即可。

    26. CEIL)

    27. 示例:

    28.  ceil1ceil1.21.51.6(-2.42.52.6   结果为:1 2 2 2 -2 -2 -2 -2

    29. 2.6FLOOR

    30. FLOORCEIL相反,返回小于或等于指定值的最大整数。

    31. FLOOR 我们沿用上面的示例:

    32.    结果:1 1 1 1 -2 -3 -3 -3

    33. 2.7MOD

    34. MOD函数主要用于复杂任务的数据处理,确保一串数字的精确传送。

    35. 也就是求余。

    36. 格式:

    37. MODdivisor   参数可以是任意实数。

    38. mod5010mod15412.355.52.97 结果:0 3 2.3 2.6 -2 0 5 2

    39. 请注意上面值为0和负数时的结果。

    40. 很显然,当divisor1时,如果value为整数,mod值为0;为0时,结果为value的值。

    41. MOD函数相似的函数REMAINDER,不过他们机制不同:MOD在公式中使用FLOOR函数,而REMAINDER使用ROUND函数

    42. 可以看下面的示例对比一下:

    43. 2.8POWER

    44. POWER用于求一个值的指数乘方。

    45. POWERexponent 例子:

    46.  powerpower1.1   结果:0.25 0.11111111111 1 -3 9 59049 1.21

    47. 也就是数学问题了。

    48. 2.9SQRT:求平方根

    49. 通过POWER,我们就可以求得一个数的平方根:POWER(value)

    50. 但是Oracle单独提供了一个球平方根的函数sqrt

    51. SQRT 下面的sql语句结果是一样的:

    52. 1210.5;
    53.   
    54.   
    55. sqrt 他们结果都为 11

    56. Oracle不支持虚数,所以这个value不能为负数,否则会返回错误

    57. 2.10EXPLNLOG

    58. 他们是与科学计算相关的函数,商业计算很少涉及。

    59. EXPe的幂运算;LN是自然对数或以e为底的对数。他们互为反函数

    60. LOG(e,value)=LN(value)

    61. 科学工作者自然会知道他们的含义,此处不多说。

    62. 2.11ROUNDTRUNC

    63. 也是两个相关的函数TRUNC按精读截取某个狮子,ROUND则根据给定的精读舍入数值。

    64. ROUNDprecision)

    65.   
    66.   
    67. TRUNC 对于他们,还是看实际的例子来得比较快:

    68.  round11round11.11111.888 trunctrunc   他们分别返回:

    69. 11 11.11 11.89 10

    70. 11 11.11 11.88 10

    71. trunc是直接截取,而round会四舍五入处理。

    72. precision参数可以为负数,表示精度移到小数点左边。

    73. 2.12SIGN

    74. ABS返回的是绝对值,即一个数的值大小,不带符号。而SIGN返回的符号。

    75. SIGN signsign 结果:-1 0 1

    76. 2.13 科学计算函数

    77. 一大波数学函数...

    78. SINSINHCOSCOSHTANTANHACOSatanatan2ASIN

    79. 我们实际使用是很少的。

    80. 如果你确实要使用,那么你数学功底一定不错,那么函数的语法又是很简单的,所以,这里不再演示他们的用法

    81. 3、聚集函数

    82. 聚体函数一般用于统计,把一组值作为操作对象来获得某个结果。

    83. 3.1、组值函数中的NULL

    84. 我们要时刻考虑到NULL值会对我们的结果造成怎样的影响。

    85. 不同于单值函数,组值函数会忽略NULL值后计算得到结果。

    86. 很多时候,这样做事挺好的:如果我们是计算平均数的,使用AVG函数,那么忽略NULL的行计算结果,可能也正是我们期望的工作方式。

    87. 但是,倘若上面这个例子,我们不是使用AVG而是SUM,那问题可能就会变得严重了。越多的NULL值,我们所得结果就与我们期望得到的正确结果相差越大。

    88. 但是对于这个问题,我们可以借助MAXMIN函数,优化我们的处理方式。

    89. 当然,COUNT与其他函数会有所不同。

    90. 1count(*)始终返回总的数据条数

    91. 2count(field)返回当前字段中不为NULL的个数

    92. 组值函数很多时候会与单值函数结合使用。

    93. 3.2、常见组值函数

    94. 常用的组值函数是:AVG,COUNT,MAX,MIN,SUM

    95. STDDEVVARIANCE函数用于常规的统计功能,分别是标准差和标准方差。

    96. 当然,他们也是sql语言标准所支持的,此处不作介绍了,可以参考:SQL数据库语言总结及代码示例

    97. 3.3、组值函数中的DISTINCT

    98. ALL对应的就是DISTINCT,语法:

    99. COUNT([DISTINCT|ALL] value)

    100. DISTINCT会强制同名字段只统计一次。

    101. 默认使用的是ALL,即检查每一行。

    102. 4、列表函数

    103. 组值函数处理的是一列,而列表函数处理的是一行的一组列。

    104. 列表函数可以比较各列,然后选出我们希望得到的一列。

    105. 比如,我们要获取同学们左右科目中最高的分数:

    106.  greatestenglishmathcpp grades   函数GREATESTLEAST用于返回最大和最小的值。

    107. GREATEST(value1,value2.value3...)

    108. LEAST(value1,sans-serif; font-size:14px"> 他们参数可以是多个,可以使用列、常量、计算结果等。

    109. 他们不仅限于数值类型中使用,也可以用于字符串类型。

    110. 函数COALESCE用于第一个非NULL的参数,如果所有参数都是NULL,则返回NULL。

    111. COALESCE(value1,sans-serif; font-size:14px"> 可以使用MAXMIN查找行,然后通过该行获取数据。

    112. 在计算和组合多个条件时,我们还要考虑到优先级,比如AND优先级高于OR,如果我们不确定优先级时,或者为了阅读更清晰,请加上括号。

    113. 更多相关内容

    114. 随着文章的更新,会逐渐补全下面的链接

    115. 1Oracle中的字符串类型及相关函数详解

    116. 2Oracle中的正则表达式(及函数)详解

    117. 3Oracle中的数值类型相关函数详解

    118. 4Oracle中的日期相关函数详解

    119. 5Oracle中的转换函数和变换函数详解

    120. 6SQL数据库语言总结及代码示例

    121. 7Oracle 12c Windows安装、介绍及简单使用(图文)

    122. 8Oracle 12c 简单的jdbc使用

    123. 9Oracle中的SQL分页查询原理和方法详解

    124. 博客会持续更新Oracle数据库相关文章

    猜你在找的Oracle相关文章