2015-12-07 27 views
0

我有一個數據庫表,文檔名稱存儲爲VARCHAR,我需要一種方法來找出最低可用序列號是什麼。有很多差距。如何找到oracle字符串字段中的下一個序列號

name   partial seq 
A-B-C-0001 A-B-C-  0001 
A-B-C-0017 A-B-C-  0017 

在上述示例中,這將是0002

所述不同名稱值總227705。 「部分」組合的數量非常大,A = 150,B = 218,C = 52,因此有1,700,400種潛在組合。

我找到了一種方法,從分鐘通過迭代到每個不同的價值最大,並列出所有的「失蹤」(又名可用)值,但這似乎效率不高,我們沒有使用任何地方接近最大可能的局部組合給出(10536 1,700,400)。

我寧願基於與部分值現有數據表,它是一個可用的序列值,並且不存在的部分手段0001

感謝

回答

0

Hmmmm,你可以試試這個:

select coalesce(min(to_number(seq)), 0) + 1 
from t 
where partial = 'A-B-C-' and 
     not exists (select 1 
        from t t2 
        where t2.partial = t.partial and 
         to_number(T2.seq) = to_number(t.seq) + 1 
       ); 

編輯:

對於所有的諧音,你需要一個group by

如有必要,您可以使用to_char()將其轉換回字符。

select partial, coalesce(min(to_number(seq)), 0) + 1 
from t 
where not exists (select 1 
        from t t2 
        where t2.partial = t.partial and 
         to_number(T2.seq) = to_number(t.seq) + 1 
       ) 
group by partial; 
+0

這似乎工作的示例部分值我給了它。那麼我可以刪除那部分,它應該完成所有這些嗎? – trueimage

相關問題