oracle的case-when,row_number(),trunc()函数

来源:互联网 发布:sql insert into 多表 编辑:程序博客网 时间:2024/05/16 01:18

  今天我们来讲一讲oracle的SQL语句中几个比较重要很深入的函数。

 1. 第一个是case-when函数

  他的作用是将数据库表格中的某一列上的值进行分组显示,显示我们想要强制性显示的内容。举例:

  select (case id when 10 then '第一个' when 14 then '第二个' else '第三个' end ) 顺序 from ssh_employee

  显示效果见附件。

  2.第二个函数是row_number()

  这个函数的作用是将查询结果按照某列分组之后再在组内进行排序。

  举例:

 select row_number() over(partition by column1 order by column2) sum from ssh_employee

  表示按照column1分组,然后在组内再按照column2进行排序。

  注意,row_number()是非确定性的(如返回值为12,13,14,15.但结果又可能是12,14,13,15),而rank()和dense_rank()是确定性函数

  显示结果见附件。

  此外,oracle也可以用rownum这个伪列来获取前几名,也很有效,但是需要使用select语句将这个伪列显式出来才可以使用>=,否则只可以用<=。

  rownum()这个伪列和order by结合时,也会产生一个很有意思的现象。

  在使用rownum时,只有当order by的字段是主键时,才会产生我们想要的先按照主键排序再计算rownum的情况。

  3.第三个是trunc()函数

  truncate表示截取,截断的意思。它可以操作的对象是日期类型和数字类型。

  ① 当操作数字类型时,需要传入两个参数,第一个是要截取的数字类型的对象,第二个是相对于小数点来说要截取到的位置,默认为0。注意,trunc()函数截取时是不会进行四舍五入的。例子:trunc(123.567,0)得到的结果是,123。trunc(123.567,-1) 得到的结果是120。

  ② 当操作日期类型时,也需要传入两个参数.第一个表示要操作的日期类型的对象。第二个表示要截取的内容。具体可以返回当前年,月的第一天。或者返回当前时间,精确到天,时 ,分,但是不会精确到秒。

 

原创粉丝点击