Oracle有很多内置函数:单行函数和集合函数

单行函数是指当查询表或视图时每行都能返回一个结果,可用于SELECT,WHERE,ORDER BY 等子句中,而集合函数是作用在多行记录上返回一个结果,可用于带GROUP BY或HAVING子句的查询中,单行函数数量比较多

注:dual是一个虚拟表,用来构成select的语法规则,Oracle里保证dual里面永远只有一条数据,所以可以使用dual来测试这些函数。部分操作:select user from dual;查看当前用户

select "TO_CHAR"(sysdate,'yyyy-mm-dd hh:MM:ss')from dual;–获得当前系统时间

select SYS_CONTEXT('USERENV','TERMINAL') from dual;     -获得主机名

select SYS_CONTEXT('USERENV','language') from dual;      -获得当前local

select dbms_random.random from dual;                  -获得一个随机数

1.数值型函数:

ABS(n)函数:用于返回绝对值,输入参数为数值型,如果参数可以隐式转换为数值类型,也可以

SELECT ABS(100),ABS(-100),ABS('100') FROM DUAL;

MOD(n2,n1)函数,该函数表示返回n2除以n1的余数,参数为任意数值或可以隐式转换为数值的类型,如果n1为0,那么函数返回n2:

SELECT MOD(5,2),MOD(8/3,5),MOD('10',5),MOD(-10,6),MOD(1,0) FROM DUAL;

SING(n)函数,返回参数n的符号,正数返回1,0返回0,负数返回-1,但如果n为binary_float或者binary_double类型是,n>=0或者n=NaN函数会返回1:

SELECT SIGN('9'),SIGN(-9),SIGN(0.00),SIGN(-2*'9') FROM DUAL;

ceil()取整函数(ceil向上取整,floor向下取整)

       SELECT ceil(66.6) num1,floor(66.6) num2 from dual;

返回固定小数位数(round(),四舍五入,trunc:直接截断)

         SELECT round(66,666,2) num1,trunc(66.666,2) from dual;

2.字符函数

        获取字符串长度:

LENGTH函数,该函数可以得到指定字符串的长度,返回类型是数字:

SELECT "LENGTH"('ABCDE神FGHI') FROM DUAL;

       字符串连接:

concat(char1,char2)函数,该函数连接两个参数并返回(只支持两个)。效果和连接符||相似

SELECT "CONCAT"('战神', '刑天'),'战神'||'刑天' FROM DUAL;

       连接符||

   SELECT '张三'||'name' 姓名 from DUAL;

      字符串搜索函数:

INSTR函数,该函数可以让我们在指定字符串中搜索是否存在另一个字符串

      INSTR|INSTRB|INSTRC|INSTR2|INSTR4 string,substring,position,occurrence

INSTR:字符为单位 INSTRB字节为单位 INSTRC 以unicode字符为单位

string:待搜索的字符串,substring:要搜索的字符串,position:搜索开始位置,默认为1,表示字符串左边第一个位置,负数从右边开始

occurrence:substring第几次出现,默认为1;

SELECT INSTR('THIS IS A 测试','测') FROM DUAL;

     替换字符串函数:

语法结构:REPLACE(char,search_string[,replacement_string];

  SELECT "REPLACE"('THIS IS A TEST','TES','RESUL') FROM DUAL;

3.日期型函数

    

Oracle中的日期类型只有date和TIMESTAMP,TIMESTAMP是比date更精确的类型。日期时间的函数用于处理日期时间类型的数据,Oracle以7位数字格式来存放日期数据,包括世纪,年,月,日,小时,分钟,秒,并且日期格式为DD-MON-YY。

在Oracle中准确是从星期日开始到星期六结束,时间差以天数为单位

3.1 系统日期,时间函数

      SYSDATE函数,该函数没有参数,可以得到系统的当前日期

SELECT SYSDATE FROM DUAL;

SYSTIMESTAMP函数,该函数没有参数,返回系统时间,返回类型为带时区的TIMESTAMP类型

SELECT SYSTIMESTAMP FROM DUAL;

得到数据库时区函数:

SELECT DBTIMEZONE FROM DUAL;

3.2 date操作

与date操作的两个转换函数:

to_date(char[fmt[,'nls_param’]]),to_char(date[,fmt,[,nls_param]])

to_date(char[fmt[,'nls_param’]]):将字符类型按一定格式转换为日期类型:

       to_date(‘2019-01-23’,‘yyyy-mm-dd’):前者为字符串后者为转化格式,注意对应

       select to_date('2017-12-11','yyyy-mm-dd') from dual

      to_char(date,’yyyy-mm-dd hh24:mi:ss):将日期按一定格式转换为字符类型

       select to_char(sysdate,'yyyy:mm:dd hh24:mi:ss ') from dual

返回多种日期格式:to_char(sysdate,’’);

select to_char(sysdate,'yyyy') 年,   to_char(sysdate,'mm')月,   to_char(sysdate,'DD') 日,       

          to_char(sysdate,'HH24') 时,  to_char(sysdate,'MI')分,     to_char(sysdate,'SS')秒,       

         to_char(sysdate,'DAY') 天,    to_char(sysdate,'Q') 第几季度,    to_char(sysdate,'W') 第几周 from dual

4.转换函数

转换函数可以完成不同数据类型之间的转换,是平常使用比较多的函数类型之一

自动类型转换:select 1+'1' from dual; 

数字转换成字符串:select 12,to_char(12) from dual;

                     select 123,to_char(1234,'999') from dual;

将字符串转换为数字:select '123',to_number('3.14') from dual;

CAST(expr as type_name)函数,该函数是数据类型转换,可以把expr参数转换成type_name类型,基本上用于数字与字符之间以及字符与日期类型之间的转换。

      SELECT CAST('123'AS INTEGER) AS VHR,CAST(123 AS VARCHAR2(8)) AS NUM,CAST(SYSDATE AS VARCHAR2(12))
AS DT FROM  DUAL;

字符串转换成date类型:select add_months('1-7月-2017',2) from dual;

5.NULL函数

返回表达式为NULL的函数

COALESCE(expr)函数。返回列表中第一个不为null的表达式,如果都为null,返回null

SELECT COALESCE(NULL,9-9,NULL) FROM DUAL

排除指定条件函数

LNNVL(condition)函数,该函数可以得到除了condition要求条件之外的数据,包括null的条件,通常用于WHERE条件中

SELECT * FROM PRODUCTINFO WHERE LNNVL(QUANTITY>=70)

替换NULL值函数

NVL(expr1,expr2)函数,替换NULL值,如果expr1为NULL值,则返回expr2的值,否则返回expr1的值。要求两个参数类型一致,至少相互之间进行隐式转换。

SELECT PRODUCTNAME,NVL(QUANTITY,0),CATEGORY FROM PRODUCTINFO;

    NVL2(expr1,expr2,expr3)函数,该函数通NVL类似,不同的是当expr1为NULL时,返回expr3的值,当expr1不为空时,返回expr2的值

6.集合函数

集合函数经常配合GROUP BY或HAVING子句使用,该类型函数中除了COUNT函数都会忽略列值为NULL的数据

6.1 求平均值函数

AVG([distinct[all] expr]函数,该函数可求取指定列的平均值,表示某组的平均值,返回数值类型,参数含义:

distinct:去除重复的值  all:表示所有的值,包括重复的值,默认值  expr:表达式,只能是数值类型

       SELECT AVG(ALL age+20) FROM student;

使用该函数式,WHERE条件子句中可以使用条件,与group by子句一起使用

SELECT AVG(ALL PRODUCTPRICE) FROM PRODUVTINFO GROUP BY CATEGORY;

6.2 求记录数量函数

COUNT(*|[distinct][all]expr)函数,该函数用来计算记录的数量或某列的个数,函数必须指定列名,或使用*,参数含义:

*:表示计算所有记录 distinct:表示去除重复记录 all:代表所有的,默认 expr:要计算的值,通常是表的列

SELECT COUNT(*) FROM PRODUCTINFO;

6.3 返回最大,最小值函数

MAX([distinct|all]expr)函数,返回指定列的 最大值

MIN([distinct|all]expr)函数,返回指定列的最小值

SELECT * FROM PRODUCTINFO

WHERE PRODUCTPRICE = (SELECT MAX(PRODUCTPRICE) FROM PRODUCTINFO)

6.4 求和函数

SUM([distinct|all] expr)函数,分组计算指定列的和,如果不分组,则函数默认把整个表作为一组,参数代表含义:

例:计算不同类型产品的 数量和

SELECT SUM(ALL QUANTITY),CATEGORY FROM PRODUCTINFO GROUP BY CATEGORY;

6.5 GROUPING函数

GROUPING函数可以接受一列,返回0或者1,如果列值为空,那么GROUPING()返回1,如果列值非空返回0,GROUPING只能在使用ROLLUP或CUBE的查询中使用。当需要在返回空值的地方返回某个值时,GROUPING()非常有用。

GROUPING函数既可以与CUBE操作一起使用,也可以与ROLLUP一起使用。GROUPING函数使用一个单独的列表示,在GROUPING函数中的expr必须匹配一个GROUP BY子句中的表达式,该函数返回值0或者1

select grouping(division_id),division_id,sum(salary) from employees group by rollup(division_id)

使用CASE函数:

select case grouping(division_id) when 1 then ‘all divisions’ else division_id end as div, sum(salary)

from employee group by rollup(division_id) order by division_id;

7 条件判断函数

7.1 case when end

结构:case when 条件值then  语句when 条件值 then 语句 else 否则语句 end

示例:select case when t.result=’1’ then‘成功’ when t.result=’2’ then‘失败’ else ‘不知道’

end  result  from user;

7.2 decode函数

多条件分支判断,最后一个参数表示默认值

select decode(字段名,‘条件1’,‘值1’,’条件2’,’值2’,默认值) from 表名

select decode(identity, 'student', '学生', 'teacher', '老师', 'nnn', '不知道',‘神秘’) as identity from person

8 其他函数

8.1 ROW_NUMBER() OVER函数

row_number() over的用法  用于排序去重操作

Oracle数据库-函数总结相关推荐

  1. Oracle数据库----函数

    --大小写控制函数 --upper select * from emp where job = upper('salesman'); --lower select * from emp where l ...

  2. Oracle数据库中调用Java类开发存储过程、函数的方法

    Oracle数据库中调用Java类开发存储过程.函数的方法 时间:2014年12月24日  浏览:5538次 oracle数据库的开发非常灵活,不仅支持最基本的SQL,而且还提供了独有的PL/SQL, ...

  3. Oracle 数据库数据排名函数:rank() 和dense_rank() 。

    Oracle 数据库数据排名函数:  rank() 和dense_rank() . --------------------------------------------间断排名(也称强制排名)   ...

  4. Oracle数据库之多行函数

    oracle安装参照: Oracle数据库之安装教程 Oracle数据库总结: Oracle数据库之基本查询 Oracle数据库之单行函数 Oracle数据库之多行函数 Oracle数据库之多表查询 ...

  5. Oracle数据库之单行函数

    oracle安装参照: Oracle数据库之安装教程 Oracel数据库总结: Oracle数据库之基本查询 Oracle数据库之单行函数 Oracle数据库之多行函数 Oracle数据库之多表查询 ...

  6. Oracle数据库中的SOUNDEX函数

    在Oracle数据库中,SOUNDEX函数返回字符串参数的语音表示形式,相对于比较一些读音相同,但是拼写不同的单词是非常有用的. SOUNDEX函数的语法: SOUNDEX(string) 计算语音的 ...

  7. oracle实验使用游标,Oracle数据库实验-PLSQL游标、过程、函数、包的使用

    Oracle数据库基础 实验5 PL/SQL游标.过程.函数.包的使用 [实验学时] 2学时 [实验目的] 1.了解PL/SQL语言中显式游标和隐式游标的概念和属性. 2.了解显式游标和隐式游标的差异 ...

  8. Oracle数据库DECODE函数的使用.

    decode函数是Oracle数据库独有的. 语法为: decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 例子:select decode(sign(变量1-变量2) ...

  9. oracle开窗函数是什么,ORACLE数据库(六)-----开窗函数

    ORACLE数据库(六)-----开窗函数 开窗函数又名分析函数.窗口函数.OLAP(数据分析)函数 聚合函数:将数据按照一定的规则分组,统一分析各组的某项情况,每个分组返回一行结果 开窗函数:将数据 ...

最新文章

  1. RUP within the context of the Six Best Practices
  2. 保证计算机网络的稳定运行,厦门大学校园网管理保证网络稳定运行
  3. 前端技术周刊 2018-09-10:Redux Mobx
  4. php个人扫码支付,PHP个人发卡网源码,支持MA支付对接,扫码自动发货
  5. java 处理时间的类_java 日期时间处理类
  6. Faster RCNN 结构总结
  7. (生物信息学)R语言与统计学入门(四)——Fisher检验
  8. 最新win10安装版激活方法 一键激活win10
  9. 工业界中NLP(自然语言处理)算法工程师的核心竞争力是什么?
  10. 3D结构光摄像头深度算法
  11. java基础 io流 字节流 字符流 节点流 包装流 转换流 缓冲流 对象流 打印流 Properties类
  12. spring boot 使用javaMailSender 发送qq邮箱验证码
  13. ICMP目的网络,主机,协议,端口不可达报文的Type值,Code值分别是
  14. ros2 launch 常见问题
  15. linux服务器重启日志,Linux系统最近重启时间、错误日志
  16. JSP一个抽奖小游戏
  17. 中国苹果树苗市场产量需求与投资收益预测报告2022-2028年
  18. 倘若生活没有改变,期盼又从何而来
  19. 怎样避免无意识偏见_精神病学意识到大数据和人工智能的价值和偏见
  20. busybox ync.c:(.text.sync_main+0x78): undefined reference to `syncfs' 出错

热门文章

  1. HDFS集群管理与运维+distcp工具的使用
  2. 如何查找涉密文件_涉密文件信息资料保密管理规定
  3. 格式化输出编码问题!
  4. 安卓预装软件卸载教程
  5. 电商快递电子面单对接使用方法
  6. 泰文utf-8转unicode编码实现
  7. 创宇滤镜|API防刷|短信邮件接口防刷|验证码防刷|搜索防刷 - 知道创宇云安全
  8. 我的世界服务器淬炼系统,我的世界淬炼指令 | 手游网游页游攻略大全
  9. 增加PRODUCT_BOOT_JARS及类
  10. 十大javascript难点