(文章目录)


一、索引

1.创建索引

注意:由于添加索引过程中,Oracle会锁全表,因此可在创建索引时加==online==关键字,该关键字是Oracle提供的非独占锁的方式添加索引。

-- 创建索引
create index 索引名 on 表名(列名)
-- 创建索引(申明表空间)
create index 索引名 on 表名(列名) online tablespace 空间名; 
create index 索引名 on 表名(列名) tablespace 表空间名;
2.创建函数索引
-- 创建函数索引
create index 索引名 on 表名(函数)
-- 例:创建表 A 中字段 b 包含 ‘str’ 内容的索引
create index IDX_B_INSTR_STR on A(INSTR(b,'str'))
3.创建组合索引
-- 创建组合索引
create index 索引名 on 表名(列名1,列名2);
4.删除索引
-- 删除索引
drop index 索引名;
5.查询索引
-- 查询索引字段
select * from user_ind_columns where index_name='索引名';
-- 查询索引
select * from user_indexes where table_name='表名';
6.强制走索引
-- 强制走索引
select /*+index(表名 索引名)*/ * from 表名;
-- 强制并行查询,并行度为8
SELECT /*+PARALLEL(8)*/ * FROM t1, t2;

二、利用正则表达式去除数据中脏文字

1.仅保留数字
--仅保留数字
REGEXP_REPLACE('字段名', '[^0-9,^.]', '');
2.去除所有字母
--去除所有字母
REGEXP_REPLACE('字段名', '[a-z,A-Z]', '');
3.去除所有中文
--去除所有中文
regexp_replace('字段名','['||chr(128)||'-'||chr(255)||']','');

三、获取指定时间数据

1.获取10分钟前的日期
-- 获取10分钟前的日期
select sysdate,sysdate-interval '10' minute from dual;
2.获取一周前的日期
-- 获取一周前的日期
select sysdate, sysdate - interval '7' day  from dual;
3.获取一个月前的日期
-- 获取一个月前的日期
select sysdate,sysdate-interval '1' month from dual;
-- 或者
select add_months(sysdate,-1) <= 时间字段 from 表名;
4.获取一年前的日期
-- 获取一年前的日期
select sysdate,sysdate-interval '1' year from dual;
5.获取当月的总天数
-- 获取当月的总天数
select to_number(to_char(last_day(sysdate),'dd')) from dual;
6.获取某一个月的总天数
-- 获取某一个月的总天数
select to_number(to_char(last_day(to_date('2023-03','yyyy-mm')),'dd')) from dual;
7.查询某一个月的全部日期
-- 查询某一个月的全部日期
SELECT 
	TO_CHAR(TRUNC(to_date('2018-09','yyyy-MM'), 'MM') + ROWNUM - 1,'yyyy-MM-dd') someday  
FROM DUAL
CONNECT BY 
	ROWNUM <= TO_NUMBER(TO_CHAR(LAST_DAY(to_date('2018-09','yyyy-MM')), 'dd'));