加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle 常用函数

发布时间:2020-12-12 16:42:53 所属栏目:百科 来源:网络整理
导读:刚进入公司,接触oracle。学习一下Oracle的常用函数。 -row_number()over(partition by 【col1】 order by 【col2】) 这个函数解释是这样的:根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的

刚进入公司,接触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 ROLLUP(TYPE,FROMDEPTID) 相当于下面三个: SELECT TYPE,COUNT(*) FROM NAOMS_IMS_TEMPLATE GROUP BY TYPE,FROMDEPTID
SELECT TYPE,COUNT(*) FROM NAOMS_IMS_TEMPLATE GROUP BY TYPE SELECT 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

后面再补充。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读