这最近那不是谈了个对象吗。对象有些优秀啊,我就很着急,我要学习啊。不能让妹子给比下去了啊,所以,大家都不要嘲讽我上班时候看博客查文档总结笔记写心得了。
做为一个经验很少的开发来讲呢,对于数据库的理解非常的片面,所以这片博客呢,主要还是记录一些函数的使用方式,当然了,写这些函数之前呢当然要吹点牛了,显得我专业嘛,对于Oracle的理解呢,毕竟是小公司,每个人都是DBA(没有DBA)能接触到的厉害的人呢,也就是一些行业群里一些大佬,认识一个很厉害的人对于各种问题啊,内存啊之类的都很是精通,反正又什么不会的直接问他就ok了,都能给你解释,我也一度的认为这个绝逼算的上业内的大佬了(现在也是这么认为),后来我问了一句,海哥,你是OCM吧,后来这哥们说是OCP,我问他为什么不考OCM,他说考不上,当时内心。。。。。当然了OCP在业内也算是很厉害的人了,当然了Oracle的知识就算你不知道内存结构底层知识之类的也不影响开发,就像我,啥都不知道,该开发一样开发嘛,只是一个月两K的工资有些住不起房子。
不说废话了,说一说今天的正题Oracle在刚开始使用的时候并不觉得他很强大,用的越来越多的时候,越来越感受到Oracle的魅力,虽然爆出Oracle有2500万行代码,各种宏命令改到跪,但是这不关我们码农的事,因为就算你想去Oracle工作,也过不了面试。
函数:
to_date 这个函数常用的是将字符串转换成日期比如to_date('2019-01-19','yyyy-mm-dd')这个函数很简单也没有什么要注意地方多用几遍就很熟悉了就算Oracle的时间格式忘记了也能在一分钟内百度出一大堆。
to_char 这个函数应该是大家都会用的函数常用于将时间格式转成字符串这里有两个要地方要注意。
第一:如果需要小时的话,并且是24小时格式 注意在小时后制定时间格式
如果不指定时间格式为24小时将默认为12小时格式
第二:转换成带中文的时间格式
直接转换时候会报错当然了,你可以选择自己拼接(应该不会有人蠢到这种地步)
需要中文的时候将中文部分使用双引号引起来
trunc
这些很基础的函数其实提供了一些很常用的功能
用在时间格式上trunc函数则默认获取到日当然了,后面完全可以指定精度
用在浮点数上默认取绝对值,也可以指定参数,用起来很简单,就不在放截图了,
trim去除空格
substr字符截取 1)一个参数,从指定位置开始截取到最后 。2)两个参数,从指定位置截取到指定位置 3)第一个参数可以是负数,如果是负数的话第二个参数失效,将从最后截取指定位置(注意第一个参数的值不要大于字符长度要么会为null值)
nvl函数这个函数很简单,但是很使用,如果第一个参数为空了将会使用第二个参数,很多程度的避免了空指针异常和在外链接查询时候取连接之外表的值
ceil函数天花板函数向上取整,不做记录,使用的时候自测一遍就可以明白
floor函数,地板函数取绝对值
round函数,四舍五入函数
length函数,获取字符长度
lpad左填充函数,第一个参数是指定字符,第二个参数填充到长度为几,第三个参数,填充什么
rpad右填充函数
说到函数不得不提一下over(partition by),这个函数简直不要太强大,到现在我会用的还是皮毛
很多的很多的查询和我所知道的一种删除重复记录只留一条的方法也会用到这个函数
这博客写了,一两个小时,没耐心写下去了,一些简单的ruak over(partition by)之类的我不常用的就不多解释了,有兴趣的自己可以去查一下,讲一下
ROW_NUMBER() OVER(partition by col1 order by col2)
这个函数很常用,业务逻辑中我用过,还有就是多条一样的数据需要删除只保留一条的时候用having就不能满足这种条件了,用这个函数就可以很轻易的做到
SELECT T.* ,ROW_NUMBER() OVER(partition by sid order by indexs) ty FROM score T
这条语句的作用呢就是加了个伪劣按照分组第一次出现的会记录为1第二次会记录为2以此类推,很多种用法
相邻函数 :lag() ,lead()这两个函数也算的上是over函数
lead(id, 1,null) over(order by id)
这个函数的作用呢,是你可以取到此条数据之后的数据,比如拍好序之后想让张三和张三后面的一个人一起显示出来就可以用此函数。后面的你们应该都能看的懂就是一个排序,看不懂我也不会讲的,我自己动就ok了好了,讲一下第一个里的参数,这个呢是向下取值lag()是向上取值,用法一样,我就只记录一个函数用法第一个参数是你要取得列,第二个是偏移量就是你要去这条数据之下的第几条,第三个值为超出值,比如这条数据已经是最后一条了,下面没有值了就可以超出值就会生效。
递归查询:递归查询我之前写的时候找了很多资料看的博客也不少,但是就是不知道为啥总是语法报错后来找书看了下
递归查询算不算常用的查询但是递归查询非常的厉害,可以查出树形结构的节点如菜单查一个父级菜单下所有的子级菜单
select * from menu
start with id ='123456789'
connect by prior id = pid
注意:递归查询不要用于子查询,效率低到令人发指,吃过亏你们就了解了,哈哈哈,不应该提示的
买二送三:在赙赠一个很常用的查询
select A.username,A.month,max(A.salary) as salary,sum(B.salary) as accumulate
from
(select username,month,sum(salary) as salary from t_access_times group by username,month) A
inner join
(select username,month,sum(salary) as salary from t_access_times group by username,month) B
on
A.username=B.username
where B.month <= A.month
group by A.username,A.month
order by A.username,A.month;
这个语句呢懒得解释了,算了讲一下吧,比如你要统计你网站的访问量但是你的访问量是你可以按月来查今天之前一共被访问了多少次,比如1号被访问10次二号5次查出来的就是 1号10次 2号就是 10 + 5 = 15次