Oracle函数

2024-01-07 22:52:09

oracle内置函数

  • 数值函数
  • 字符函数
  • 日期函数
  • 转换函数

函数

字符串函数

函数说明
CONCAT(X,Y)连接字符串X和Y
INSTR(X,STR[,START][,N)从X中查找str,可以指定从start开始,也可以指定从n开始
LENGTH(X)返回X的长度
LOWER(X)X转换成小写
UPPER(X)X转换成大写
LTRIM(X[,TRIM_STR])把X的左边截去trim_str字符串,缺省截去空格
RTRIM(X[,TRIM_STR])把X的右边截去trim_str字符串,缺省截去空格
TRIM([TRIM_STR FROM]X)把X的两边截去trim_str字符串,缺省截去空格
REPLACE(X,old,new)在X中查找old,并替换成new
SUBSTR(X,start[,length])返回X的字串,从start处开始,截取length个字符,缺省length,默认到结尾
translate会把旧数据拆成单个字符去匹配,旧字符在新字符没有匹配到就删除
lpad rpad左边补位,右边补位
?-- 字符串连接
?select concat('abc','hello') as str from dual; ?-- abchello
??
?-- 获得字符串长度
??
?select length('abc天津') as len from dual; ?-- 5
??
?-- 转大写/小写字母
?select UPPER('abc') from dual; ?--ABC
??
?select LOWER('aBc') from dual; ?--abc
??
?-- 去除左右空格 trim
?select trim(' ? ?  rererer ?  dfdfd ? ? ? ')from dual;--rererer ?  dfdfd
??
?-- 查找替换
?select replace('abcbc123bc123','bc','k') from dual; --akk123k123
??
?-- 截取 字符串  , 从1开始 不是从0开始
??
?select SUBSTR('1234567890',2,3) from dual;--  234 
?select SUBSTR('1234567890',2) from dual;-- 234567890
??
??

数字函数

函数说明
abs(X)求绝对值
ceil(X)向上取整
floor(X)向下取整
mod(X)取余
power幂函数
round(X,Y)四舍五入
sqrt求平方根

?-- 求绝对值
? select abs(-2) from dual; ? --2
? 
? --ceil 向上取整
? select ceil(4.34) from dual;--5
? select ceil(4.01) from dual;--5
? select ceil(4.00) from dual;--4
? --floor 向下取整
? ?select floor(4.01) from dual;--4
? select floor(4.94) from dual;--4
? --round- 四舍五入
? 
? select round(4.41) from dual;--4
? select round(4.94) from dual;--5
??

日期函数

函数说明
sysdate获得系统时间
add_months(r,n)载指定日期r上加一个月份n后的日期
extract(time)返回指定time当中的年月日等日期部分-- 做提取
months_between(r1,r2)返回两个日期间的月份数
floor(r1,r2)计算两个日期的天数
?-- 获取当前系统的日期及时间
? select sysdate from dual;
? 
? - add_months(日期,增加/减少的月)
? select sysdate,ADD_MONTHS(sysdate, 3),ADD_MONTHS(sysdate, -3) from dual;
? 
? -- MONTHS_BETWEEN 计算两个日期间的月数
? 
? select  MONTHS_BETWEEN(sysdate,ADD_MONTHS(sysdate, 3)) from dual;
? 
?-- extract(fmt from date) ? fmt 就是 你要提取的内容
?select EXTRACT( year ?from sysdate) from dual;
?select EXTRACT( month ?from sysdate) from dual;
?select EXTRACT( day ?from sysdate) from dual;
??
??
? 
?-- floor  计算两个日期的天数
? 
?select  FLOOR(sysdate - ADD_MONTHS(sysdate, 3)) from dual;
??

转换函数

?--to_date()  将字符串转为日期
??
?--to_char()  把 日期或数字 转换成字符串
??
??
?select to_date('2000-04-19','yyyy-mm-dd') from dual; ?
??
??
?SELECT to_char(sysdate,'yyyy/mm/dd') from dual;
??
??
?-- 在格式化字符串中,使用双引号对非格式化字符进行引用
?SELECT to_char(sysdate,'yyyy"年"mm"月"dd"日"') from dual;
??

练习题

?-- 查询2000年12月1日出生的员工信息
?select ?*
?from  emp
?where  to_char(borndate,'yyyy-mm-dd')='2000-12-01';
??
?select ?*
?from  emp
?where  borndate=to_date('2000-12-01','yyyy-mm-dd');
??
??
??
??
??
?--update emp set borndate=to_date('2000-12-1','yyyy-mm-dd') where eno=1103
??
?--查询员工姓名中包含 大写字母A的员工信息
??
?select *
?from emp
?where ename like '%A%';
??
??
??
?--
?update emp set ename='bcAvv' where eno in (1103,1102)
??
??
?--计算2021-12-12到现在有多少月
??
?select MONTHS_BETWEEN(to_date('2021-12-12','yyyy-mm-dd'), sysdate) from dual;
??
??
??
??
??
??
?--查询 在2月出生的学生信息
??
??
?select * from emp;
??
?select *
?from emp
?where EXTRACT(month from  BORNDATE)=2;
??
??
??
??
??
??
??
??
?-- 查询身份证 第89位 是 60 的学生信息
??
?select *
??
?from student
?where  SUBSTR(idcart, 8, 2) ='60'
??
??
?select substr('12011016023234567',8,2) from dual;
??
??
??
?select
? *
? from
?  student
?    
??

?alter table student add (idcart VARCHAR2(50))
??
??
??
?--将邮箱中的abc改为 tt
??
?update student
??
?set ? email=REPLACE(email, 'abc', 'tt');
? ? ? 
??
?select REPLACE('abc@126.com', 'abc', 'tt') from dual;
??
?select * from emp;
??
??
?--将员工姓名中的bc改为 tt
?update emp
??
?set ? ename=REPLACE(ename, 'bc', 'tt');
? ? ? 
??
??
?
??

文章来源:https://blog.csdn.net/ly121862/article/details/135377384
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。