字符替换
--把 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.段止)