1.创建表
create table T_USER
(
userid VARCHAR2(500) default sys_guid(),
username VARCHAR2(50),
adress VARCHAR2(150)
);
2.新增 使用sys_guid() 给主键传入的值
insert into T_USER
values
(sys_guid(),'牧','中国');
ORACLE中的字符串替换
--把 str_source 中 str1 字符串替换为 str2 字符串,当 str2 为 null 或'' 时,与下个作用相同
replace(str_source,str1,str2)
--把str_source 中的 str1 字符串剔除
replace(str_source,str1)
--支持正则表达式,用法类似于 replace,但功能更强大
regexp_replace(str_source,pattern_str,rep_str)
--把 str_source 中的 pattern_str 字符串剔除
regexp_replace(str_source,pattern_str)
--以字符为单位,把 str_source 中的 chr1 字符对应替换为 chr2.
translate(str_source,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.段止)
Oracle 特殊符号&
处理方法:
用Oracle的字符串处理函数chr
处理。
chr(38)表示 &符号如:
select chr(38) from dual
select 'a' || chr(38) || 'b' from dual
其他不能处理的特殊符合,也用类似的方式处理。
如果不知道该特殊符号的值,可以调用ascii函数处理如:
select ascii('&'),ascii('$') from dual
时间转换成时间戳
select (to_date('2023-03-28 15:43:57', 'yyyy-mm-dd hh24:mi:ss') -
to_date('1970-01-01 08:00:00', 'yyyy-mm-dd hh24:mi:ss')) * 86400000
from dual;