oracle常用函数及sql(持续更新中~)

标题 oracle常用函数及sql(持续更新中~)

  1. SUM --求和
  2. GROUP BY --分组
  3. DISTINCT --去重
  4. NVL(target, value) --判断target是否是null,是的话使用value代替
  5. ROUND(number,num_digits)

Number是需要进行四舍五入的数字;Num_digits为指定的位数,按此位数进行四舍五入.如果 num_digits 大于 0,则四舍五入到指定的小数位,如果 num_digits 等于 0,则四舍五入到最接近的整数,如果 num_digits 小于 0,则在小数点左侧进行四舍五入。

  1. trunc()

-日期处理
TRUNC(date,[fmt])
 date 为必要参数,是输入的一个date日期值
fmt 参数可忽略,是日期格式,缺省时表示指定日期的0点。
-数值处理
TRUNC(number,[decimals])
   number 为必要参数,是输入的一个number数值
   decimals 参数可忽略,是要截取的位数,缺省时表示截掉小数点后边的值。

  1. to_date(‘2021-01-01 00:00:01’, ‘yyyy-mm-dd hh24:mi:ss’)
  2. to_char(sysdate,‘yyyy-MM-dd HH:mm:ss’)
  3. last_day(sysdate) --获取当前日期的最后一天
  4. add_months(sysdate, --6) --6个月之前的时间
  5. ceil(n) --取大于等于数值n的最小整数
  6. floor(n) --取小于等于数值n的最大整数
  7. substr --字符截取
  8. regexp_like(target, ‘1+[0-9]$’) --正则匹配
  9. CASE WHEN 条件1 THEN... WHEN 条件2 THEN... WHEN 条件3 THEN... ELSE...END as a
  10. COALESCE(val1,val2,val3,val4…) --遇到非null值即停止并返回该值
  11. OVER(PARTITION BY)

-一种分析函数
例:查询每个部门工资最高的雇员信息
deptno --部门
select * from (select ename, deptno, sal, Row_Number() over(partition by deptno order by sal desc)MAXCAR from emp) where MAXCAR = 1
解释:over 表示行号从头到尾添加上,partition by 表示以什么为分隔,一起使用就是以部门号为分隔,给各部门的员工后加上行号,然后根据行号筛选出需要的数据

  1. pivot

行转列
select * from demo pivot(count(DISTINCT so_no) for order_level in (‘00’ so_count_00, ‘10’ so_count_10))
select * from demo pivot (count(pa_id) for zone_code in (‘H01’ PA_H01, ‘H02’ PA_H02, ‘H03’ PA_H03, ‘H04’ PA_H04, ‘H05’ PA_H05, ‘H06’ PA_H06))

  1. full join…on…

全连接 [https://blog.csdn.net/adminZSQ/article/details/106383963?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2defaultCTRLISTdefault-1.no_search_link&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2defaultCTRLISTdefault-1.no_search_link&utm_relevant_index=1]

  1. || --拼接符
  2. concat(target, '’) --拼接号,只能连接两个字符
  3. UNION\ UNION ALL

union指令的目的是将两个sql语句的查询结果合并起来,但是要注意使用union连接的两个sql 语句的字段类型 、 字段个数 、 字段名要求完全匹 UNION会去重;而union all 是直接将两个sql语句的查询结果合并返回 从效率上来讲union all 要比union快得多

  1. DECODE

ORDER BY DECODE (H.SO_NO, ‘SO202111180015’, 0), H.CREATE_TIME DESC --将H.SO_NO='SO202111180015’的数据,排在第一行

  1. oracle分页
SELECT
	*
FROM
	(
		SELECT
			s.*, ROWNUM AS RN
		FROM
			(
				sql
			) s
		WHERE
			ROWNUM <= 1 * 10
	)
WHERE
	RN > (1 - 1) * 10
  1. connect by

根据sql查询到的结果行,每一行复制对应needScanCount次并显示
with t as(
sql
)
select * from t connect by rownum <= t.needScanCount;
– 查找一下id为001001的子孙后代
select * from text_cen start with id = ‘001001’ connect by prior id = parentid

  1. ~

  1. 0-9 ↩︎

上一篇:老男孩-学习笔记day42


下一篇:简单的oracle备份删除脚本