[英]How to find missing sequence number?
我有一列具有NVARCHAR2数据类型。 它的顺序值增加一,并具有模式“ D2017 \\ S \\ S \\ S \\ S”,从0000开始并继续向上。 现在我一直到D20179999都有值,但是我从D20170001到D20179999缺少10个值,如何找到这些值?
这就是你所需要的。 首先,您应该生成从D20170001
到D20179999
范围。 然后,您必须将其与顺序列正确连接,然后找到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.