Oracle 所有函数使用

函数一般是在数据上执行的,它给数据的转换和处理提供了方便。 只是将取出的数据进行处理,丌会改变数据库中的值。
 

Sql函数可以分为组函数和单行函数。

  • 组函数又被称作聚合函数,用亍对多行数据进行操作,幵返回一个单一的结 果,组函数仅可用亍选择列表戒查询的having子句
  • 单行函数对单个数值进行操作,幵返回一个值。
  1. 单行函数
  • 字符函数
--字符函数全以字符作为参数,返回值分为两类:一类返回字符值,一类返回数字值
-- concat(string1,string2)连接两个字符串 ||
SELECT "CONCAT"(ENAME, MGR) FROM EMP;
-- initcap(string)string中每个单词首字母大写
SELECT "INITCAP"(ENAME) FROM EMP;
-- Lower(string) 以小写形式返回string
SELECT "LOWER"(ENAME) FROM EMP;
--lpad,rpad 填充字符型数据
SELECT "LPAD"(1, 3,3) FROM EMP;
SELECT "RPAD"(3, 3, 5) FROM EMP;
-- ltrim/rtrim (string1,string2) – trim(A from B)
SELECT "LTRIM"(ENAME) FROM EMP;
SELECT "RTRIM"(ENAME) FROM EMP;
-- Substr() 提取字符串的一部分substr(string,1,2) – upper(string)以大写形式返回string
SELECT "SUBSTR"(ENAME,2,2) FROM EMP;
SELECT "SUBSTR"(ENAME,2,3) FROM EMP;
SELECT "UPPER"('lll') FROM EMP;
-- Instr()字符串出现的位置, instr( string ,’A‘) – Length()字符串长度
SELECT "INSTR"(ENAME,'A')  FROM EMP;
SELECT "LENGTH"(ENAME) FROM EMP;
select * FROM EMP;
--CONCAT:表示字符串的连接  等同于||
SELECT CONCAT('MY NAME IS ', ENAME) FROM EMP;
--将字符串的首字母大写
SELECT INITCAP(ENAME) FROM EMP;
--将字符串全部转换为大写
SELECT UPPER(ENAME) FROM EMP;
--将字符串全部转换为小写
SELECT LOWER(ENAME) FROM EMP;
--填充字符串
SELECT LPAD(ENAME,10,'*') FROM EMP;
SELECT RPAD(ENAME,10,'*') FROM EMP;
--去除空格
SELECT TRIM(ENAME) FROM EMP;
SELECT LTRIM(ENAME) FROM EMP;
SELECT RTRIM(ENAME) FROM EMP;
--查找指定字符串的位置
SELECT INSTR('ABABCDEF','A') FROM EMP;
--查看字符串的长度
SELECT LENGTH(ENAME) FROM EMP;
--截取字符串的操作
SELECT SUBSTR(ENAME,0,2) FROM EMP;
--替换操作
SELECT REPLACE('ABABEFG','AB','HEHE') FROM EMP;
  • 数值函数
--数值函数以NUMBER类型为参数返回NUMBER值 ▪ round(number,n)返回四舍五入后的值
 SELECT "ROUND"(23.652) FROM DUAL;
 SELECT "ROUND"(23.652, 2) FROM DUAL;
 SELECT "ROUND"(23.652, -1) FROM DUAL;
--trunc(number,n) – select trunc(23.652) from dual;
SELECT TRUNC(23.652, 2) FROM DUAL;
SELECT TRUEC(23.652, -1) FROM DUAL;
-- mod(x,y)求余数
 SELECT MOD(13,5) FROM DUAL;
--ceil()上取整 select ceil(19.2) from dual;
SELECT CEIL(19.2) FROM DUAL;
-- floor()下取整 select floor(19.2) from dual;
SELECT "FLOOR"(19.2) FROM DUAL;
--给小数进行四舍五入操作,可以指定小数部分的位数
SELECT ROUND(123.123,2) FROM DUAL;
SELECT ROUND(123.128,2) FROM DUAL;
SELECT ROUND(-123.128,2) FROM DUAL;

--截断数据,按照位数去进行截取,但是不会进行四舍五入的操作
SELECT TRUNC(123.128,2) FROM DUAL;
--取模操作
SELECT MOD(10,4) FROM DUAL;
SELECT MOD(-10,4) FROM DUAL;
--向上取整
SELECT CEIL(12.12) FROM DUAL;
--向下取整
SELECT FLOOR(13.99) FROM DUAL;
--取绝对值
SELECT ABS(-100) FROM DUAL;
--获取正负值
SELECT SIGN(-100) FROM DUAL;
--X的Y次幂
SELECT POWER(2,3) FROM DUAL;
  • 日期函数
--Oracle以内部数字格式存储日期:世纪,年,月,日,小时,分钟,秒 – sysdate/current_date
--获取当前时间
SELECT SYSDATE FROM DUAL;
SELECT CURRENT_DATE FROM DUAL;
-- Add_months(d,x) 返回加上x月后的日期d的值 正数是为未来的时间,负数是过去的时间
SELECT "ADD_MONTHS"(SYSDATE, -24) FROM dual;
SELECT "ADD_MONTHS"(SYSDATE, 24) FROM dual;
-- LAST_DAY(d) 返回的所在月份的最后一天
SELECT "LAST_DAY"(SYSDATE) FROM DUAL;
--Months_between(date1,date2) 返回date1和date2之间月的数目
SELECT "MONTHS_BETWEEN"(SYSDATE, "ADD_MONTHS"(SYSDATE, -24)) FROM DUAL;
--日期和日期时间算术
--从日期中加戒减一个数值,以得当一个日期结果值
SELECT SYSDATE+2 FROM DUAL;
SELECT SYSDATE-2 FROM DUAL;
--两个日期相减以便得到他们相差多少天
SELECT ENAME,HIREDATE 原日期,SYSDATE 现在时间,ROUND((SYSDATE-HIREDATE)/7) WEEKES FROM EMP WHERE DEPTNO=10

SELECT SYSDATE FROM DUAL;
SELECT CURRENT_DATE FROM DUAL;
--ADD_MONTHS,添加指定的月份
SELECT ADD_MONTHS(HIREDATE,2),HIREDATE FROM EMP;
--返回输入日期所在月份的最后一天
SELECT LAST_DAY(SYSDATE) FROM DUAL;
--两个日期相间隔的月份
SELECT MONTHS_BETWEEN(SYSDATE,HIREDATE) FROM EMP;
--返回四舍五入的第一天
SELECT SYSDATE 当时日期,
ROUND(SYSDATE) 最近0点日期,
ROUND(SYSDATE,'DAY') 最近星期日,
ROUND(SYSDATE,'MONTH') 最近月初,
ROUND(SYSDATE,'Q') 最近季初日期, 
ROUND(SYSDATE,'YEAR') 最近年初日期 FROM DUAL;
--返回下周的星期几
SELECT NEXT_DAY(SYSDATE,'星期一') FROM DUAL;
--提取日期中的时间
SELECT 
EXTRACT(HOUR FROM TIMESTAMP '2001-2-16 2:38:40 ' ) 小时,
EXTRACT(MINUTE FROM TIMESTAMP '2001-2-16 2:38:40 ' ) 分钟,
EXTRACT(SECOND FROM TIMESTAMP '2001-2-16 2:38:40 ' ) 秒,
EXTRACT(DAY FROM TIMESTAMP '2001-2-16 2:38:40 ' ) 日,
EXTRACT(MONTH FROM TIMESTAMP '2001-2-16 2:38:40 ' ) 月,
EXTRACT(YEAR FROM TIMESTAMP '2001-2-16 2:38:40 ' ) 年
 FROM DUAL;
--返回日期的时间戳
SELECT LOCALTIMESTAMP FROM DUAL;
SELECT CURRENT_DATE FROM DUAL;
SELECT CURRENT_TIMESTAMP FROM DUAL;
--给指定的时间单位增加数值
SELECT
TRUNC(SYSDATE)+(INTERVAL '1' SECOND), --加1秒(1/24/60/60)
TRUNC(SYSDATE)+(INTERVAL '1' MINUTE), --加1分钟(1/24/60)
TRUNC(SYSDATE)+(INTERVAL '1' HOUR), --加1小时(1/24)
TRUNC(SYSDATE)+(INTERVAL '1' DAY),  --加1天(1)
TRUNC(SYSDATE)+(INTERVAL '1' MONTH), --加1月
TRUNC(SYSDATE)+(INTERVAL '1' YEAR), --加1年
TRUNC(SYSDATE)+(INTERVAL '01:02:03' HOUR TO SECOND), --加指定小时到秒
TRUNC(SYSDATE)+(INTERVAL '01:02' MINUTE TO SECOND), --加指定分钟到秒
TRUNC(SYSDATE)+(INTERVAL '01:02' HOUR TO MINUTE), --加指定小时到分钟
TRUNC(SYSDATE)+(INTERVAL '2 01:02' DAY TO MINUTE) --加指定天数到分钟
FROM DUAL;
  • 转换函数
--标量数据可以有类型的转换,转换分为两种,隐式类型转换和显示类型转换。
-- 隐式类型转换可用亍:
--字符和数字的相互转换 &字符和日期的相互转换
--VARCHAR2 or char--number
--VARCHAR2 or char --date
--number--varchar2
--date--varchar2
SELECT * FROM EMP WHERE DEPTNO="TO_NUMBER"('20');
SELECT * FROM EMP WHERE HIREDATE='20-2月-1981' ;
--尽管数据类型之间可以进行隐式转换,仍建议使用显示转换函数,以保持良好的设计风格。
SELECT '999'-10 值 FROM DUAL;
--TO_CHAR()
SELECT "TO_CHAR"('95') FROM DUAL;
--TO_NUMBER
SELECT "TO_NUMBER"('23.989'2) FROM DUAL;
--TO_CHAR  函数操作日期
SELECT TO_CHAR(SYSDATE,'dd-mon-yy hh24:mi:ss') FROM DUAL;
SELECT "TO_CHAR"(HIREDATE, 'yyyy-mm-dd') FROM EMP;
--TO_CHAR 函数操作数字
--9 代表一位数字,如果该位没有数字则不进行显示,但对于小数点后面的部分仍会强制显示
SELECT TO_CHAR(SAL,'$99,999.99') FROM EMP;
--0 代表一位数字,如果该位没有数字则强制显示0 $ 显示美元符号
SELECT TO_CHAR(SAL,'$00,0000.00') FROM EMP;
--L 显示本地货币符号
SELECT TO_CHAR(SAL,'L00,0000.00') FROM EMP;
--. 显示小数点
SELECT TO_CHAR(SAL,'L000,000.00') FROM EMP;
--,显示千分位符号
SELECT TO_CHAR(SAL,'99,99,00') FROM EMP;
--TO_DATE (STRING,FORMAT) – 将CHAR戒VARCHAR2类型的STRING转换为DATE类型
SELECT TO_DATE('04,05,19,10,23,40','yy,mm,dd,hh12,mi,ss') FROM DUAL;
SELECT TO_DATE('2004-09-19','yyyy-mm-dd') FROM DUAL;
--TO_NUMBER(STRING,FORMAT) – 将CHAR戒VARCHAR2类型的STRING转换为NUMBER类型
SELECT TO_NUMBER('$39343.783','$99990.000') FROM DUAL; 
SELECT TO_NUMBER('11.231','999.999') FROM DUAL;
--单行函数嵌套
-- 显示没有上级管理的公司首脑
--没有上级领导的雇员 mgr显示为boss
SELECT ENAME,NVL(TO_CHAR(MGR),'NO MANAGER') FROM EMP WHERE MGR IS NULL;
--显示员工雇佣期满6个月后下一个星期五的日期
 SELECT TO_CHAR(NEXT_DAY(ADD_MONTHS(HIREDATE,7),'Friday'),'fmDay,Monthddth,YYYY') FROM EMP ORDER BY HIREDATE;
  • 其他函数
--DECODE
SELECT DEPTNO,ENAME,"DECODE"(DEPTNO,10,'RESEARCH',20,'ACCOUNTING',30,'SALES',40,'OPERATIONS') FROM EMP  ;
SELECT ENAME ,"DECODE"("SIGN"(SAL-3000),1,'高薪',0,'中等',-1,'低薪') FROM EMP;
--CASE WHEN
SELECT DEPTNO,ENAME, (CASE DEPTNO WHEN 20 THEN '技术部'   WHEN 30 THEN '研发部'   WHEN 40 THEN '财务部' ELSE '人资部' END )  FROM  EMP ;

  1. 组函数
/*
组函数,一般情况下,组函数都要和GROUPBY组合使用
组函数一般用于选择列表或者HAVING条件判断
常用的组函数有5个
AVG()  平均值,只用于数值类型的数据
MIN()  最小值,适用于任何类型
MAX()  最大值,适用于任何类型
COUNT() 记录数,处理的时候会跳过空值而处理非空值
    COUNT一般用来获取表中的记录条数,获取条数的时候可以使用*或者某一个具体的列
       甚至可以使用纯数字来代替,但是从运行效率的角度考虑,建议使用数字或者某一个具体的列
       而不要使用*
       
SUM()   求和,只适合数值类型的数据
*/
SELECT AVG(SAL) FROM EMP;
SELECT MIN(SAL) FROM EMP;
SELECT MAX(SAL) FROM EMP;
SELECT COUNT(SAL) FROM EMP;
SELECT SUM(SAL) FROM EMP;
--GROUP BY,按照某些相同的值去进行分组操作
--GROUP进行分组操作的时候,可以指定一个列或者多个列,但是当使用了GROUPBY 之后,
--选择列表中只能包含组函数的值或者GROUP BY 的普通字段
--求每个部门的平均薪水
SELECT AVG(SAL) FROM EMP GROUP BY DEPTNO;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值