【问题标题】:Oracle SQL query to list missing filenames from a sequence of filenamesOracle SQL 查询从文件名序列中列出丢失的文件名
【发布时间】:2012-08-29 19:29:54
【问题描述】:

有没有办法使用 Oracle SQL 从以下文件名序列中列出丢失的文件名?

文件名存储在 table1 中。有两种类型的文件名 type1 和 type2。文件名不一定以正确的序列号顺序存储。对于每种文件类型,应该有十个文件(序列编号为 001-010)。

文件名的格式如下:

文件类型.type1.seq.001.dat

文件类型.type1.seq.004.dat

文件类型.type2.seq.001.dat

文件类型.type1.seq.006.dat

文件类型.type2.seq.006.dat

文件类型.type1.seq.007.dat

文件类型.type1.seq.010.dat

文件类型.type2.seq.004.dat

文件类型.type1.seq.002.dat

文件类型.type1.seq.003.dat

文件类型.type2.seq.005.dat

文件类型.type2.seq.008.dat

文件类型.type2.seq.009.dat

文件类型.type2.seq.010.dat

此序列中丢失的文件是:

filetype.type1.seq.005.dat、filetype.type1.seq.008.dat、filetype.type1.seq.009.dat 文件类型.type2.seq.002.dat、文件类型.type2.seq.003.dat、文件类型.type2.seq.007.dat

谢谢。

【问题讨论】:

    标签: oracle


    【解决方案1】:

    您可以在运行时生成文件名,例如:

    select 'filetype.type' || typeno || '.seq.' || to_char(seqno,'fm000') || '.dat'
           as filename
    from (select rownum as typeno from dual connect by level <= 2)
        ,(select rownum as seqno from dual connect by level <= 10)
    minus
    select filename from table1;
    

    【讨论】:

    • 杰弗里-您的回答非常感谢。现在如果每天都收到文件列表并且序列号总是递增,有没有办法每天列出丢失的文件?
    • 为了方便起见,我会在文件名“YYYYMMDD”中添加一个日期值,这样您只需测试最近几天的文件,并且 SEQ 编号最大为“99999”新文件名格式看起来像 'filetype.type1.seq.00005.20120830.dat' 再次感谢。
    • 您需要提前知道每天预计有多少文件。否则,您必须检查每个可能的序列值。添加日期戳的想法是个好主意。更好的是,将日期存储为表中的另一列。
    【解决方案2】:
    select filename
    from ref_table
    MINUS
    select distinct filename
    from table1;
    

    ref_table 将包含所有可能文件名的列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-10
      • 2017-11-21
      • 2015-06-06
      • 1970-01-01
      • 2015-08-21
      • 2021-12-26
      • 1970-01-01
      相关资源
      最近更新 更多