2013-09-26 37 views
2

我正在嘗試使用OleDbConnection從Access數據庫檢索一些信息。我正在試圖通過一列包含一組字符串格式的數字來排序結果。用Access數據庫中的字母后綴排序數字

我希望自然順序的結果(例如1,2,10,20與1,10,2,20),所以我將感興趣的列中的數據轉換爲整數並對結果進行排序。

"SELECT Drawing, Sheet FROM TableName ORDER BY CINT(Sheet) ASC" 

這工作得很好,但在某些情況下,當將表數據具有帶有字母后綴(例如圖1A,2B,等...)的值。上述命令顯然不適用於這些案例。

我想排序,像這樣的結果:1,2,2A,2B,3,3A,等等...

那麼,如何去了解呢?我見過一些使用REGEXP和一些條件語句的示例,但顯然MS SQL不支持REGEXP。所以我卡住了。想法將不勝感激。

回答

3

無法在從Access會話外部運行的查詢中使用正則表達式。如果查詢在Access會話中運行,則可以使用RegExp的自定義VBA函數。但是,無論如何,正則表達式方法對於這種情況似乎都是過度殺手。你可以簡單地用Val()得到你需要的東西。

Val Function將從您的字符串中的數字中返回一個數字。當它碰到一個字母時,它將停止閱讀該字符串。

下面是即時窗口的示例。

? Val("2A") 
2 

使用它在您的查詢像這樣...

SELECT Drawing, Sheet 
FROM TableName 
ORDER BY Val(Sheet), Sheet; 
+0

完美的作品!我注意到有必要對Val(Sheet)和Sheet進行排序,否則只有前面的數字按照自然順序排列。 – SharpBarb

+0

好吧,聽起來像你注意到之前我想將它包含在答案中。那是一個搖頭丸。 :-) – HansUp