oracle的内外连接、数字函数、字符串函数、日期函数、转换函数。instr与substr

---第一,内链接查询
---1.内链接:是通过主外键关联的。如果不加条件(主外键条件)就是笛卡尔积(两个表的总数进行想成),where之前现在就是一张表
---显示的都是符合条件的,没有主表从表之分
select * from student inner join score on  student.sno=score.sno where sname='张三'

--第二:外连接查询:
--1.左外连接:以left左边表(主表)为基准,整合之后的总条数等于左边表的总数
--左表中(主表)的数据都会显示,右表(子表)中满足on条件的正常显示,不满足条件的用null填充
--(把左边表全部显示,右边表符合条件的显示内容,不符合条件的显示空),on后面是条件
select * from student left join score on student.sno=score.sno
--2.右外连接:以右边表为基准,数据的总条数等于右表的条数
select * from student right join score on student.sno=score.sno
--3.全链接: 就是把两个表合并,对数据不影响(没有基准表)(相当于对左右链接的合并),总行数就是数据多的那个表的数据量
select * from student full join score on student.sno=score.sno


--oracle中的函数
--1.数字函数(函数用select调用),dual是oracle提供的空表,用于测试函数
 select ceil(23.3) from dual;---向上取整
 select floor(-23.3) from dual;---向下取整
select round(23.3) from dual---四舍五入
-----重点是上面这三个函数
select mod(6,2) from dual---取余
select sqrt(4) from dual--开平方
sign
select trunc(23.22,1) from dual--保留几位小数

---2.字符(串)函数
select ascii('a') from dual---获取a的ASCII,65
select concat('乌龟','王八') from dual---连接字符串
select length('hhhhhhh') from dual---取长度,几个字符
select lpad('aaaa',10,'x') from dual---padding填充,长度是十个,当不够十个的时候,就在左边填充x
rpad
select 'a' || ltrim('   assss   ') from dual----去左边空格
rtrim
select 'a' || rtrim(ltrim('   assss   ')) from dual--去全部空格
select replace('乌龟王八','王八','是你') from dual--替换
select substr('乌龟王八',1,2) from dual--截取。1是从哪开始截取。2是截取的长度

---3.日期函数
select sysdate  from dual---stsdate是无参的函数,因此不需要加()。返回系统当前日期
select add_months(sysdate,4)  from dual---给系统日期加上4个月份
select add_months(sysdate,-4)  from dual---给系统日期减上4个月份
select extract(year from sysdate)  from dual---取出年份
select extract(month from sysdate)  from dual---月
select extract(month from sysdate)  from dual---日
---以上的日期函数是最常用的
select last_day(sysdate)  from dual---返回这个月的最后一天
select months_between(sysdate,add_months(sysdate,5))  from dual--返回这两个时间相差的月份,前减去后
select next_day(sysdate,'星期一')  from dual--返回下一个星期一是几号
select trunc(sysdate,'year')from dual---返回这个日期所代表的年份的第一天
select trunc(sysdate,'month')from dual---返回这个日期所代表的月份的第一天

---4,转化函数,
--(1),to_char():将数字或者日期转化成字符串。
--将number转化成字符串,需要两个参数to_char(1111,‘’),后面是格式
--日期也需要格式,第二个参数是格式,,,,HH24:HI:ss
select to_char(1111) from dual
--select to_char(1111,‘格式’) from dual
select to_char(sysdate,'dd-mm-yyyy ') from dual

---(2),to_number()将字符串转化成数字
select to_number('111.11','9G999D99')+10 from dual-- 9G999D99三位整数,两位小数

---(3),to_date()将字符串转化成日期
select to_date('2014-07-14','yyyy-mm-dd')from dual---转化
select extract(year from  to_date('2014-07-14','yyyy-mm-dd'))from dual--转化之后调用日期的函数

select to_char(dbms_random.value)---dbms_random这是包名,value函数  ,这是个number类型的,现在转化成字符串 0000 0000 000 0000
select '1234 ' ||'5678 '||'3455 ' from dual

-------------------------------------------------------------------------------------------------------------instr与substr

扫描二维码关注公众号,回复: 353979 查看本文章

substr是截取字符串。instr的返回值是int类型,表示该字符的位置

substr(ta.FUNC_CODE_NAME,instr(ta.FUNC_CODE_NAME,'(')+1,7)

select substr('FECV.FE001.2012',1,instrb('FECV.FE001.2012','.',1,2)-1) from dual;

猜你喜欢

转载自1601844782.iteye.com/blog/2267222