oracle实用小方法

字符替换
--把 str中 str1 字符串替换为 str2 字符串,当 str2 为 null 或'' 时 
replace(str,str1,str2)  
 
--把str中的 str1 字符串剔除
replace(str,str1)          
 
--支持正则表达式,用法类似于 replace,但功能更强大 
regexp_replace(str,pattern_str,rep_str) 
 
 --把 str中的 pattern_str 字符串剔除 
regexp_replace(str,pattern_str)  
 
--以字符为单位,把 str中的 chr1 字符对应替换为 chr2.
translate(str,chr1,chr2) 
select trunc(sysdate, 'd') from dual--上周日
select trunc(sysdate, 'd')+7 from dual --本周日
表中添加字段

alter table 表名 add 字段名  varchar2(20);
字段设置注释

comment on column 表名.字段名
  is '注释';
 修改列

alter table 表名 rename column 旧名称 to 新名称;
修改列的类型

alter table 表名 modify 列名称    varchar(200); 
 删除数据库一列 

alter table 表名  drop column 列名;
添加索引

create index 索引名称 on 表名(列名);
查找表中存在多条数据

select * from people
where peopleId in (select   peopleId from   people group by   peopleId having count
 
(peopleId) > 1)
多条件查询统计重复数据

select *
  from people t
 where (t.LOCATION1, t.LOCATION2) in
       (select t1.LOCATION1, t1.LOCATION2
          from people t1
         group by (t1.LOCATION1, t1.LOCATION2)
        having count(*) > 1)
循环插入 

-- Created on 2020/7/3
declare
  -- Local variables here
  j number := 0;
begin
  -- Test statements here
  for i in 1 .. 60 loop
    insert into 表名
      (
       code,
       name,
       )
    values
      ('34126370' + i,
       'zhansan' || i
      );
  end loop;
  commit;
 
end;
查询昨天数据: 

SELECT COUNT(1) FROM 表名 WHERE TO_CHAR(字段名,'YYYY-MM-DD')=TO_CHAR(SYSDATE-1,'YYYY-MM-DD') 
查询本周数据:

SELECT COUNT(1) FROM  表名 WHERE 字段名>= TRUNC(NEXT_DAY(SYSDATE-8,1)+1) AND 字段名< TRUNC(NEXT_DAY(SYSDATE-8,1)+7)+1
查询上周数据:

SELECT COUNT(1) FROM  表名 WHERE 字段名>= TRUNC(NEXT_DAY(SYSDATE-8,1)-6) AND 字段名< TRUNC(NEXT_DAY(SYSDATE-8,1)+1)
查询本月数据:

SELECT COUNT(1) FROM 表名 WHERE TO_CHAR(字段名,'YYYY-MM')=TO_CHAR(SYSDATE,'YYYY-MM')
查询上月数据:

SELECT COUNT(1) FROM 表名 WHERE TO_CHAR(字段名,'YYYY-MM')=TO_CHAR(ADD_MONTHS(SYSDATE,-1),'YYYY-MM')
去掉结果集中的字母数字

select regexp_replace ('X0112 姬如雪', '([0-9]+|[a-z]+|[A-Z])+', '') as a from dual;
去除数字:

select replace(translate('zaca124ABC678aaad590coder','0123456789',' '),' ','') from dual;
ROW_NUMBER()函数去重

Parttion by关键字,用于给结果集进行分区。它和聚合函数Group by不同的地方在于它只是将原始数据进行名次排列,能够返回一个分组中的多条记录(记录数不变),Group by是对原始数据进行聚合统计,一般只有一条反映统计值的结果

select *
  from (SELECT  a.*, ROW_NUMBER() OVER(PARTITION BY userId ORDER BY dateTime desc) as num
          FROM 表名 a) t
 where t.num = 1
BETWEEN  区间 过滤区间是否交叉或者存在

select *
  from  表名 t
 where t.name= '区间一'
   and (25 BETWEEN t.段起 and t.段止- 1 or 50 BETWEEN t.段起+ 1 and t.段止)
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值