Oracle 常用函数


 

单行函数

  1. 操作数据对象
  2. 接受参数返回一个结果
  3.  只对一行进行变换
  4.  每行返回一个结果
  5. 可以转换数据类型
  6. 可以嵌套
  7. 参数可以是一列或一个值

 格式

    Oracle 常用函数

 

字符函数

 

 Oracle 常用函数

 

 

 Oracle 常用函数

 

 

 数字函数

Oracle 常用函数

 

 

 Oracle 常用函数

 

 

 TRUNC:     截断
TRUNC(45.926, 2)            45.92
Oracle 常用函数

 

 

 日期函数

Oracle 中的日期型数据实际含有两个值: 日期和时间

日期默认格式:DD-MON月-RR

     • 在日期上加上或减去一个数字结果仍为日期。
    • 两个日期相减返回日期之间相差的天数。
    • 日期间不允许做加法运算,无意义
    • 可以用数字除24来向日期中加上或减去天数
Oracle 常用函数

 

 

 Oracle 常用函数

 

 

 Oracle 常用函数

 

 

 

注意分钟是mi

 

显示转换函数

 

Oracle 常用函数

 

 

 

 

to_char

对金额

Oracle 常用函数

 

 

 Oracle 常用函数

 

 

 

--  $000,123.14
SELECT TO_CHAR(123.14, '$000,000.99') from dual;
-- $123.14 select TO_CHAR(123.14,'$999,999.99') from dual; --  ¥000,123.14 SELECT TO_CHAR(123.14, 'L000,000.99') from dual;

 

对日期

 

Oracle 常用函数

 

 

 

Oracle 常用函数

 

 Oracle 常用函数

 

 

 

--  2022-08-21 05:13:36

SELECT TO_CHAR(sysdate,'yyyy-mm-dd hh:mi:ss') FROM dual;

-- 2022-08-21 17:15:59
 SELECT TO_CHAR(sysdate,'yyyy-mm-dd hh24:mi:ss') FROM dual;

 

 

其他可参考:https://www.cnblogs.com/yuan88008/p/15597988.html

 

条件函数

NVL (expr1, expr2)  前面为空,用后面替代
NVL2 (expr1, expr2, expr3) expr1不为空,expr2,为空则exper3
NULLIF (expr1, expr2) 相等返回Null,不等返回expr1
COALESCE (expr1, expr2, …, exprn) expr1为空则判断expr2,知道不为空就返回

decode(条件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值)

含义:
IF 条件=值1 THEN
    RETURN(翻译值1)
ELSIF 条件=值2 THEN
    RETURN(翻译值2)
    ……
ELSIF 条件=值n THEN
    RETURN(翻译值n)
ELSE
    RETURN(缺省值)
END IF

行转列函数

pivot

语法

SELECT * FROM (数据查询集)
PIVOT
(
 SUM(Score/*行转列后 列的值*/) FOR
 coursename/*需要行转列的列*/ IN (转为列的值[ as 列名])
)

 

eg:

SQL> SELECT job
  2  ,      deptno
  3  ,      SUM(sal) AS sum_sal
  4  FROM   emp
  5  GROUP  BY
  6         job
  7  ,      deptno
  8  ORDER  BY
  9         job
 10  ,      deptno;

JOB           DEPTNO    SUM_SAL
--------- ---------- ----------
ANALYST           20       6600
CLERK             10       1430
CLERK             20       2090
CLERK             30       1045
MANAGER           10       2695
MANAGER           20     3272.5
MANAGER           30       3135
PRESIDENT         10       5500
SALESMAN          30       6160
SQL> WITH pivot_data AS (
  2          SELECT deptno, job, sal
  3          FROM   emp
  4          )
  5  SELECT *
  6  FROM   pivot_data
  7  PIVOT (
  8             SUM(sal)        --<-- pivot_clause
  9         FOR deptno          --<-- pivot_for_clause
 10         IN  (10,20,30,40)   --<-- pivot_in_clause
 11        );

JOB               10         20         30         40
--------- ---------- ---------- ---------- ----------
CLERK           1430       2090       1045
SALESMAN                              6160
PRESIDENT       5500
MANAGER         2695     3272.5       3135
ANALYST                    6600

5 rows selected.

pivot_clause:定义要聚合的列(pivot 是聚合操作)
pivot_for_clause:定义要分组和旋转的列;
pivot_in_clause:为 pivot_for_clause 中的列定义过滤器(即限制结果的值范围)。 pivot_in_clause 中每个值的聚合将被转置到单独的列中(在适当的情况下)。
对pivot函数的理解:对于非pivot_for_clause列来说,按其所对应pivot_for_clause列的值pivot_in_clause来分组,计算后的值pivot_clause为 (pivot_in_clause值作为的)新列下的新值,
pivot_for_clause列拥有所有这些(不同pivot_in_clause)作为的新列,即便有些新列下的值为空,因为非pivot_for_clause列对应的pivot_for_clause列下可能没有pivot_in_clause中的某些值
隐含分组-》按非pivot_for_clause列非pivot_clause列进行分组,再按pivot_in_clause值对pivot_clause进行分组聚合

分组函数

分组排序 :

  ROW_NUMBER() OVER (PARTITION BY 字段1 ORDER BY 字段2 DESC)   , 顺序: 1,2,3,4…n
  RANK() OVER(PARTITION BY 字段1 ORDER BY 字段2 DESC), 相同的为同一序次,且下一个依旧按照总的顺序,即序号不连续,会发生跳跃 :1,2,3,3,3,6,7…n

  DENSE_RANK() OVER(PARTITION BY 字段1 ORDER BY 字段2 DESC),区别于rank是序号始终连续,不会发生跳跃 : 1,2,2,2,3,4….n

Oracle 常用函数

 

 分组聚合拼接某列值

LISTAGG函数可以指定具有相同属性的数据进行拼接  行转列

listagg(要行转列聚合的列的列名,‘分隔符’)within group(order by 按照该列排序的列名)  , 配合group by使用=》分组聚合行转列

Oracle 常用函数

 

 select TID,listagg(LOC,’,’)within group(order by DEPTNO) LOC_AGG from DEPT
GROUP BY TID;

Oracle 常用函数

 

 order by 倒序

Oracle 常用函数

 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/database/281489.html

(0)
上一篇 2022年8月22日 00:46
下一篇 2022年8月22日 00:47

相关推荐

发表回复

登录后才能评论