一、常用字符函数
1.ASCII(X) : 返回字符X的ASCII码
select ASCII(‘A’) from DUAL;
2.CONCAT(X,Y) : 连接字符串X和Y
select CONCAT('Hello ',‘World’) FROM DUAL;
3.INSTR(X,STR[,START][,N) : 从X中查找str,返回位置(从1开始)可以指定从start开始,也可以指定从n开始
select INSTR(‘HelloWorld’,‘W’)FROM DUAL;
4.LENGTH(X) : 返回X的长度
select LENGTH(‘helloworld’)FROM DUAL;
5.LOWER(X) : X转换成小写
select LOWER(‘HELLOWORLD’) FROM DUAL;
6.UPPER(X) : X转换成大写
select upper(‘helloworld’) from dual;
7.LTRIM(X[,TRIM_STR]) : 把X的左边截去trim_str字符串,缺少截去空格
select LTRIM(’----hello----’,’-’) from dual;
8.RTRIM(X[,TRIM_STR]) : 把X的右边截去trim_str字符串,缺少截去空格
select rtrim(’----hello----’,’-’) from dual;
9.TRIM([TRIM_STR FROM]X) : 把X的两边截去trim_str字符串,缺少截去空格
select TRIM(’-‘FROM’----hello----’) FROM DUAL;
10.REPLACE(X,old,new) : 在X中查找old,并替换成new
select replace (‘hello,world’,’,’,’!’) from dual;
11.SUBSTR(X,start[,length]) : 返回X的字串,从start处开始,截取length个字符,缺少length,则默认到结尾
select SUBSTR(‘helloword’,6) from dual;
select SUBSTR(‘helloword’,6,1) from dual;
二、常用数学函数
1.ABS(X) : X的绝对值
select ABS(-115) from dual;
2.ACOS(X) : X的反余弦
select acos(1) from dual;
3.COS(X) : 余弦
select cos(1) from dual;
4.CEIL(X) : 大于或等于X的最小整数值
select ceil(0.3555)from dual;
5.FLOOR(X) : 小于或等于X的最大整数值
select FLOOR(5.1234) from dual ;
6.LOG(X,Y) : X为底Y的对数
select log (2,2) from dual;
7.MOD(X,Y) : X除以Y的余数
select mod(5,2) from dual;
8.POWER(X,Y) : X的Y次幂
select POWER(2,2) from dual;
9.SQRT(X) : 开X的平方根
select sqrt(9)from dual;
10.ROUND(X[,Y]) : X在小数点左/右第Y位,四舍五入
select round(2.26264) from dual;不指定Y,Y默认为0
select round(28732.2691021,-3) from dual;Y为负,左
select round(2.260389,4)from dual;Y为正,右
11.TRUNC(X[,Y]) : X在小数点左/右第Y位截断,直接截取
select TRUNC(2.26264) from dual;不指定Y,Y默认为0
select TRUNC(28732.2691021,-3) from dual;Y为负,左
select TRUNC(2.260389,4)from dual;Y为正,右
三、常用日期函数
1、ADD_MONTHS(d,n) : 在某一个日期 d 上,加上指定的月数 n,返回计算后的新日期
SELECT SYSDATE,add_months(SYSDATE,12) FROM dual;
2、LAST_DAY(d) : 返回指定日期当月的最后一天
select SYSDATE,last_day(SYSDATE) from dual;
3、ROUND(d[,fmt]) : 返回一个以 fmt 为格式的四舍五入日期值, d 是日期, fmt 是格式,默认 fmt 为 DDD
–如果 fmt 为“YEAR”则舍入到某年的 1 月 1 日,即前半年舍去,后半年作为下一年
select ROUND(SYSDATE,‘year’)FROM dual;
–如果 fmt 为“MONTH”则舍入到某月的 1 日,即前月舍去,后半月作为下一月
select ROUND(SYSDATE,‘month’) FROM dual;
–默认为“DDD”,即月中的某一天,最靠近的天,前半天舍去,后半天作为第二天
select ROUND(SYSDATE),ROUND(SYSDATE,‘DDD’) FROM dual;
–如果 fmt 为“DAY”则舍入到最近的周的周日,即上半周舍去,下半周作为下一周周日
select ROUND(SYSDATE,‘day’) FROM dual;
SELECT SYSDATE,ROUND(SYSDATE),ROUND(SYSDATE,‘DDD’),
ROUND(SYSDATE,‘day’),ROUND(SYSDATE,‘month’),ROUND(SYSDATE,‘year’)FROM dual;
4、TRUNC(d[,fmt]) : 与上相似,只是不对日期进行舍入,直接截取到对应格式的第一
SELECT SYSDATE,TRUNC(SYSDATE),TRUNC(SYSDATE,‘DDD’),
TRUNC(SYSDATE,‘day’),TRUNC(SYSDATE,‘month’),TRUNC(SYSDATE,‘year’)FROM dual;
5、EXTRACT(fmt FROM d) : 提取日期中的特定部分。
fmt 为:YEAR、MONTH、DAY、HOUR、MINUTE、SECOND。其中 YEAR、MONTH、DAY可以为 DATE 类型匹配,也可以与 TIMESTAMP 类型匹配;但是 HOUR、MINUTE、SECOND 必须与 TIMESTAMP 类型匹配。
HOUR 匹配的结果中没有加上时区,因此在中国运行的结果小 8 小时。
SELECT SYSDATE "date",
EXTRACT(YEAR FROM SYSDATE)"year",
EXTRACT(MONTH FROM SYSDATE)"month",
EXTRACT(DAY FROM SYSDATE)"day",
EXTRACT(HOUR FROM SYSTIMESTAMP)"hour",
EXTRACT(MINUTE FROM SYSTIMESTAMP)"minute",
EXTRACT(SECOND FROM SYSTIMESTAMP)"second"
FROM dual;
四、常见转换函数
1、TO_CHAR(d|n[,fmt]) : 把日期和数字转换为制定格式的字符串。Fmt是格式化字符串
select to_char(SYSDATE,‘yyyy “年” MM “月” dd “日” hh24:mm:ss’)“date” from dual;
SELECT TO_CHAR(SYSDATE,‘YYYY “年” MM “月” DD “日” HH:MI:SS’)“date” FROM dual;
SELECT TO_CHAR(-123123.45,‘L9.9EEEEPR’)“num” FROM dual;对数字的处理
2、TO_DATE(X,[,fmt]) : 把一个字符串以fmt格式转换成一个日期类型
select to_date(‘2019年10月15日’,‘yyyy"年"MM"月"dd"日"’)“date” from dual;
3、TO_NUMBER(X,[,fmt]) : 把一个字符串以fmt格式转换为一个数字
SELECT TO_NUMBER(’-$12,345.67’,’$99,999.99’)“num” FROM dual;
五、常用聚合函数
1.COUNT(DISTINCT expr,[expr…]) : 数据统计
SELECT COUNT() FROM tb_student; 查询总条数
SELECT COUNT()FROM tb_exam e WHERE e.exam_score<60 ;查找成绩不及格的学生总数
2.SUM(expr) : 求和
SELECT SUM(e.exam_score) FROM tb_exam e;查询成绩表,所有学生的总成绩(累加)
3.MAX(expr) : 求最大值
SELECT MAX(e.exam_score) FROM tb_exam e;查找成绩最高分
4.MIN(expr) : 求最小值
SELECT MIN(s.stu_age) FROM tb_student s;查找最小的学生年龄
5.AVG([DISTINCT] expr) : 求平均数
SELECT AVG(e.exam_score) FROM tb_exam e;计算出所有学生的平均分
六、其他单行函数
1.NVL(X,VALUE) : 如果X为空,返回value,否则返回X
select nvl(exam_score,60) from tb_exam ;如果成绩为空,那就默认为60分
2.NVL2(x,value1,value2) : 如果x非空,返回value1,否则返回value2
select nvl2(exam_score,‘已考’,‘待考’) from tb_exam;
七、自定义函数
求和
create or replace function addition(num1 in number, num2 in number)
return number is
num3 number;
begin
num3 := num1 + num2;
return num3;
end;
select addition(1,1) from dual;