标题 oracle常用函数及sql(持续更新中~)
- SUM --求和
- GROUP BY --分组
- DISTINCT --去重
- NVL(target, value) --判断target是否是null,是的话使用value代替
- ROUND(number,num_digits)
Number是需要进行四舍五入的数字;Num_digits为指定的位数,按此位数进行四舍五入.如果 num_digits 大于 0,则四舍五入到指定的小数位,如果 num_digits 等于 0,则四舍五入到最接近的整数,如果 num_digits 小于 0,则在小数点左侧进行四舍五入。
- trunc()
-日期处理
TRUNC(date,[fmt])
date 为必要参数,是输入的一个date日期值
fmt 参数可忽略,是日期格式,缺省时表示指定日期的0点。
-数值处理
TRUNC(number,[decimals])
number 为必要参数,是输入的一个number数值
decimals 参数可忽略,是要截取的位数,缺省时表示截掉小数点后边的值。
- to_date(‘2021-01-01 00:00:01’, ‘yyyy-mm-dd hh24:mi:ss’)
- to_char(sysdate,‘yyyy-MM-dd HH:mm:ss’)
- last_day(sysdate) --获取当前日期的最后一天
- add_months(sysdate, --6) --6个月之前的时间
- ceil(n) --取大于等于数值n的最小整数
- floor(n) --取小于等于数值n的最大整数
- substr --字符截取
- regexp_like(target, ‘1+[0-9]$’) --正则匹配
CASE WHEN 条件1 THEN... WHEN 条件2 THEN... WHEN 条件3 THEN... ELSE...END as a
- COALESCE(val1,val2,val3,val4…) --遇到非null值即停止并返回该值
- 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 表示以什么为分隔,一起使用就是以部门号为分隔,给各部门的员工后加上行号,然后根据行号筛选出需要的数据
- 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))
- 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]
- || --拼接符
- concat(target, '’) --拼接号,只能连接两个字符
- UNION\ UNION ALL
union指令的目的是将两个sql语句的查询结果合并起来,但是要注意使用union连接的两个sql 语句的字段类型 、 字段个数 、 字段名要求完全匹 UNION会去重;而union all 是直接将两个sql语句的查询结果合并返回 从效率上来讲union all 要比union快得多
- DECODE
ORDER BY DECODE (H.SO_NO, ‘SO202111180015’, 0), H.CREATE_TIME DESC --将H.SO_NO='SO202111180015’的数据,排在第一行
- oracle分页
SELECT
*
FROM
(
SELECT
s.*, ROWNUM AS RN
FROM
(
sql
) s
WHERE
ROWNUM <= 1 * 10
)
WHERE
RN > (1 - 1) * 10
- 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
- ~
-
0-9 ↩︎