繁体   English   中英

如何找到丢失的序列号?

[英]How to find missing sequence number?

我有一列具有NVARCHAR2数据类型。 它的顺序值增加一,并具有模式“ D2017 \\ S \\ S \\ S \\ S”,从0000开始并继续向上。 现在我一直到D20179999都有值,但是我从D20170001到D20179999缺少10个值,如何找到这些值?

这就是你所需要的。 首先,您应该生成从D20170001D20179999范围。 然后,您必须将其与顺序列正确连接,然后找到null以获取缺少的范围。

select * from your_table y
right join  
(select 'D2017'||lpad(to_char(level),4,'0') as c_range
      from dual connect by level < 10000) dt
on y.<range_column>=dt.c_range
where y.<range_column> is null

编辑:按照@mathguy,为获得更好的性能,请使用

select * from 
(select 'D2017'||lpad(to_char(level),4,'0') as c_range
      from dual connect by level < 10000) dt
 where dt.c_range not in (select <range_column> from your_table)

我将其复制了10个值,但可以类似地将其扩展为10000。

with rt (e_range) as (
select 'D20179990' from dual union all
select 'D20179991' from dual union all
select 'D20179992' from dual union all
select 'D20179994' from dual union all
select 'D20179995' from dual union all
select 'D20179997' from dual union all
select 'D20179998' from dual union all
select 'D20179999' from dual)
select c_range from rt
right join (select 'D2017999'||to_char(level) as c_range from dual connect by level < 10) dt
on rt.e_range=dt.c_range
where rt.e_range is null

输出量

C_RANGE
D20179993
D20179996

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM