2013-10-21 186 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;