oracle小知识点

1. 根据已有的表,创建一个新表

CREATE TABLE table_name AS SELECT * FROMold_table_name;

2. 分组后获取每组数据的前2条数据

select 
    t.id,t.err_msg ,t.create_date, t.rn
from 
    (select row_number() over(partition by to_char(create_date, 'yyyymm') order BY ID desc)rn, t_stkkh_idno_info_log.* FROM t_stkkh_idno_info_log) t
where 
    t.rn<3;


语法解释:

select

列名1,列明2 ...

from

(select row_number() over(partition by 分组字段 order by 排序字段) rn, 列名a, 列名b... from 表名) t

where

t.rn <= 需要的数量;

其中设置顺序有三种方式:

row_number() 是没有重复值的排序(即使两条记录相等也是不重复的),可以利用它来实现分页:1, 2, 3, 。。。
dense_rank() 是连续排序,两个第二名仍然跟着第三名:1, 2, 2, 3, 4, 。。。。
rank()       是跳跃排序,两个第二名下来就是第四名:1, 2, 2, 4, 。。。。

mysql的实现方式:http://www.tuicool.com/articles/eQ3EVv

3. 删除字段中多于8位的数字;  导出客户三方存管失败原因, 部分错误原因包含有客户的银行卡号,但是也有6位的错误代码或者其他的代码信息.为了脱敏,在导出的数据中去除8位以上的数字

使用正则匹配8位数字

SELECT regexp_replace('xxxx12343242354ddd444yy8900987654', '\d{8,}', '') from dual t; --xxxxddd

regexp_replace(1, 2, 3, 4, 5, 6)

regexp_replace(字段 str, 被替换字符 a, 替换字符8, 从被替换字符第几次出现的位置开始 b,替换该字符第几次出现位置 c, 是否区分大小写 h);

1:字段、字符串等(源数据)

2:源数据中需要被替换的字符

3:用什么字符替换源数据中的字符

4:从被替换字符出现的第几次开始替换,

5:以被替换字符第n次出现的位置开始, 替换此后第几次出现的字符。 0表示不限制位置

6:替换时, 是否区分大小写;小写字母"i"表示不区分大小写, 空字符""表示区分大小写

测试数据:

select regexp_replace('ABadAeafarAt','a','0',2,0,'i') from dual; -- 不区分大小写, AB0d0e0f0r0t
select regexp_replace('ABadAeafarAt','a','0',2,0,'') from dual;  -- 区分大小写, AB0dAe0f0rAt

select regexp_replace('ABadAeafarAt','a','0',2,1,'i') from dual;  -- 从第二个开始,替换之后的第一个 AB0dAeafarAt
select regexp_replace('ABadAeafarAt','a','0',2,3,'i') from dual; -- 从第二个开始,替换之后的第三个ABadAe0farAt
select regexp_replace('ABadAeafarAt','a','0',2,4,'i') from dual; -- 从第二个开始,替换之后的第四个ABadAeaf0rAt

获取已创建序列,以当前值开始的创建语句

数据覆盖时,索引无法从当前值同步. 通过一下sql获取相关索引当前值的创建语句, 需要有写权限的账户才能查到结果

SELECT dbms_metadata.get_ddl('SEQUENCE',object_name) FROM user_objects WHERE object_type = 'SEQUENCE' AND OBJECT_NAME LIKE '%具体的序列名称%' ORDER BY created DESC;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值