-1

我想从下面的 sql 语句中按升序显示我的 cnumber,即 1111111,2222,33333,4444 等。

   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 结果是

在此处输入图像描述

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

我怎样才能显示结果,如 1..2..3..4..5..6..

4

3 回答 3

1

在将文本数据类型转换为数字类型时,您可以强制进行数字排序。使用显式或隐式转换

 ORDER BY cnumber * 1 ASC
于 2013-10-21T06:24:50.847 回答
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;
于 2013-10-21T06:26:12.400 回答
0

看起来您cnumber的设置为文本而不是数字。尝试使用CONVERT函数来强制使用标准数字比较而不是文本一进行排序:

ORDER BY
    CONVERT(cnumber, INTEGER) ASC;*

但我会从考虑您的列数据类型更改开始。为什么在首先处理数字数据时将其设置为文本?

于 2013-10-21T06:24:25.503 回答