2013-10-21 190 views
-1

我想從下面的sql語句中以升序顯示我的cnumber,即1111111,2222,33333,4444等。按升序排列(ASC)

SELECT 
     * 
    FROM 
     BIBLEBOOK 
    INNER JOIN 
     CHAPTER ON (BIBLEBOOK.BIBLEBOOK_Id=CHAPTER.BIBLEBOOK_Id) 
    INNER JOIN 
     VERS ON(CHAPTER.CHAPTER_Id=VERS.CHAPTER_Id) 
    WHERE 
     BIBLEBOOK.bnumber='2' 
    ORDER BY 
     cnumber ASC;* 

但是,當我運行的SQL結果是

enter image description here

111111 ... 10101010 .... 111111 ... 12121212 .... 131313 .... 22222222

如何顯示結果如1..2..3..4..5..6 ..

回答

0

看起來像您的cnumber設置爲文本而不是數字。嘗試使用CONVERT函數強制排序發生使用的,而不是一個文本標準號比較:

ORDER BY 
    CONVERT(cnumber, INTEGER) ASC;* 

不過,我會考慮從列數據類型的變化開始。爲什麼當它首先處理數字數據時它被設置爲文本?

1

將文本數據類型轉換爲數字類型時,可以強制進行數字排序。使用顯式或隱式的這種鑄

ORDER BY cnumber * 1 ASC 
1

你不包括任何的DDL來形容你的表,但它好像你cnumber被定義爲VARCHAR列,因而字典順序排序。 如果它確實只包含NUMERIC數據並且總是按照這種方式使用,那麼更改列的數據類型可能是一個好主意。

如果你不能這樣做,你總是可以明確地將它轉換成你的查詢,這樣它就可以按照數字進行排序。

SELECT * 
FROM BIBLEBOOK 
INNER JOIN CHAPTER ON (BIBLEBOOK.BIBLEBOOK_Id=CHAPTER.BIBLEBOOK_Id) 
INNER JOIN VERS ON(CHAPTER.CHAPTER_Id=VERS.CHAPTER_Id) 
WHERE BIBLEBOOK.bnumber='2' 
ORDER BY CAST (cnumber AS NUMERIC) ASC;