我們的應用程序有一個CustomerNumber
字段。我們有數百個使用該系統的人(每個人都有自己的登錄名和他們自己的CustomerNumber
s列表)。一個用戶最多可能擁有100,000個客戶。許多人少於100人。如何排序和顯示用戶期望的混合alpha和數字列表?
有些人只將實際數字放到他們的顧客號碼字段中,而另一些人則使用混合物。系統允許20個字符,它們可以是A-Z,0-9或破折號,並將它們存儲在VARCHAR2(20)中。在存儲之前,小寫字母都是大寫的。
現在,假設我們有一個簡單的報告,列出特定用戶的所有客戶,按客戶編號排序。例如
SELECT CustomerNumber,CustomerName
FROM Customer
WHERE User = ?
ORDER BY CustomerNumber;
這是一個天真的解決方案,只有用不完號不希望看到一個普通的字母排序的人(其中「10」在「9」之前)。
我不想問用戶有關他們的數據的任何不必要的問題。
我使用的是Oracle,但我認爲看到其他數據庫的一些解決方案會很有趣。請包括您的答案適用於哪個數據庫。
您認爲最好的實現方式是?
另請參閱http://stackoverflow.com/questions/34518/natural-sorting-algorithm以及其他標記爲「自然排序」的內容以供討論和實施... – dmckee 2009-02-16 14:39:49