刚进入公司,接触oracle。学习一下Oracle的常用函数。
-row_number()over(partition by 【col1】 order by 【col2】) 这个函数解释是这样的:根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的); 意思就是按照col1分组,并按照col2排序,返回在当前组内的序号。 拿第二条记录来说,意思就是:该条记录是“AIRLINECN”字段分组后在“奥凯”这一组中通过FLIGHTNO排序后的第二条记录。
- to_char(【col】,‘yyyy-mm-dd hh24:mi:ss’) 这个函数比较容易理解,就是将日期转换为想要的字符。 例子:select to_char(date,’yyyy-mm-dd hh24-mm-ss’) from students; 下面还扒了其它的一些用法: Select to_char(sysdate,’ss’) from dual取当前时间秒部分 Select to_char(sysdate,’mi’) from dual取当前时间分钟部分 Select to_char(sysdate,’HH24’) from dual取当前时间秒小时部分 Select to_char(sysdate,’DD’) from dual取当前时间日期部分 Select to_char(sysdate,’MM’) from dual取当前时间月部分 Select to_char(sysdate,’YYYY’) from dual取当前时间年部分 Select to_char(sysdate,’w’) from dual取当前时间是一个月中的第几周(从1日开始算) Select to_char(sysdate,’ww’) from dual取当前时间是一年中的第几周(从1.1开始算) Select to_char(sysdate,’iw’) from dual取当前时间是一年中的第几周(按实际日历的) Select to_char(sysdate,’d’) from dual取当前时间是一周的第几天,从星期天开始,周六结束 Select to_char(sysdate,’day’) from dual 取当前日是星期几,和数据库设置的字符集有关,会输出’Tuesday’ Select to_char(sysdate,’ddd’) from dual 当前日是一年中的第几天
还有 陵哥教的一个直接获取到星期几的方法: to_char(【col】,’day’,’NLS_DATE_LANGUAGE = ”SIMPLIFIED CHINESE”’) ; 例子:select a.flightdate,to_char(a.flightdate,’NLS_DATE_LANGUAGE = ”SIMPLIFIED CHINESE”’) from naoms_mv_flightinfo a
- systimestamp 当前系统的时间戳 。systimestamp是一个关键字表示当前系统时间戳。(在这我有个稚嫩的想法,就是这个时间是不是当前电脑上的时间,如果是那每个电脑上的时间不一样,那不乱了。于是我尝试改了一下我电脑上的时间,然后又跑了一下sql语句,发现我想多了)。 例子:select systimestamp from dual;固定写法。 可以看到这个时间戳的格式,让人难受。 可以这样来获得想要的时间戳格式
- decode 在sql语句中,我们也可以用if语句,但是这里的if语句不是应用程序开发中的if语句,sql语句中是不能使用if语句的,这里的if语句是具有if功能的Oracle内置函数decode和case。 decode(【col】,【condition1】,【result1】,【condition2】,【result2】,【其他不匹配条件】) 在decode函数中,col填写要进行条件判断的字段。如果满足condition1条件就显示result1结果,依次类推,最后没有匹配的显示【其他不匹配条件】。 例子:select AIRLINECN,decode(name,‘国际’,’我是国际’,’不是我想要的’) from students。 如果name字段是“国际”的则结果是“我是国际”,非“国际”结果都是“不是我想要的”。
- case case上面提到也是条件判断语句 例子:select age, case when age> 72 then ‘high’ when age=72 then ‘medium’ else ‘low’ end from students 当age大于72时结果为”high”,当age等于72时结果为”medium”,其他的结果为”low”。
- rownum rownum是Oracle预定义表示行的序列号。执行查询语句时,如何给行加上序号,就用这东西。 例子:select rownum,id from students
-group by rollup rollup先按一定的规则产生多种分组,然后按各种分组统计数据。 这个函数把我整的好惨,他是什么意思你,如果你没接触过,你看到解释也不明白。各种百度没看明白之后,我反复操作和group by的区别 终于明白了。
一步一步来,先看一下group by 这就是根据type字段进行分组,并统计了每组的数量。 再来看一下group by rollup 多了一行总计。 这里只是一个字段,两个字段的我们来看一下。 group by
group by rollup 我们发现加入rollup之后从6行变为了10行。多的这4行为统计行。 为什么是多的四行呢?这四行哪来的?从一个字段中我们发现加入rollup之后多了一行统计。两个字段后统计的就变多了。他不仅有总的统计(第10行的值),而且还有前四行的统计(第5行的值),第6行的统计(第7行),第8行的统计(第9行)。为什么这样统计呢?因为他又按照第一个分组条件TYPE进行了分组统计。
SELECT TYPE,FROMDEPTID,COUNT FROM NAOMS_IMS_TEMPLATE GROUP BY TYPE,FROMDEPTID
SELECT TYPE,COUNT FROM NAOMS_IMS_TEMPLATE GROUP BY null
如果是三个分组条件,那么就会根据前两个分组条件进行统计,前两个分组统计完了,再根据第一个分组条件进行分组统计,最后再来一个总的统计。
- wm_concat 字符串拼接,讲字段内容拼接成字符串,并用逗号隔开。
-sign(x) 获取x的符号 x>0 返回1 x<0返回-1 x=0返回0
- trunc 功能很多啊。下面摘自http://www.cnblogs.com/suding1188/archive/2013/01/06/2848067.html –Oracle trunc()函数的用法 /****日期**********/ 1.select trunc(sysdate) from dual –2013-01-06 今天的日期为2013-01-06 2.select trunc(sysdate,‘mm’) from dual –2013-01-01 返回当月第一天. 3.select trunc(sysdate,’yy’) from dual –2013-01-01 返回当年第一天 4.select trunc(sysdate,’dd’) from dual –2013-01-06 返回当前年月日 5.select trunc(sysdate,’yyyy’) from dual –2013-01-01 返回当年第一天 6.select trunc(sysdate,’d’) from dual –2013-01-06 (星期天)返回当前星期的第一天 7.select trunc(sysdate,‘hh’) from dual –2013-01-06 17:00:00 当前时间为17:35 8.select trunc(sysdate,‘mi’) from dual –2013-01-06 17:35:00 TRUNC()函数没有秒的精确 /*****数字**********/ /* TRUNC(number,num_digits) Number 需要截尾取整的数字。 Num_digits 用于指定取整精度的数字。Num_digits 的默认值为 0。 TRUNC()函数截取时不进行四舍五入 */ 9.select trunc(123.458) from dual –123 10.select trunc(123.458,0) from dual –123 11.select trunc(123.458,1) from dual –123.4 12.select trunc(123.458,-1) from dual –120 13.select trunc(123.458,-4) from dual –0 14.select trunc(123.458,4) from dual –123.458 15.select trunc(123) from dual –123 16.select trunc(123,1) from dual –123 17.select trunc(123,-1) from dual –120
后面再补充。 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|