我想从下面的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 ..
答案 0 :(得分:1)
将文本数据类型转换为数字类型时,可以强制进行数字排序。使用显式或隐式转换
ORDER BY cnumber * 1 ASC
答案 1 :(得分: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;
答案 2 :(得分:0)
看起来您的cnumber
设置为文字而非数字。尝试使用CONVERT
函数强制使用标准数字比较而不是文本1来进行排序:
ORDER BY
CONVERT(cnumber, INTEGER) ASC;*
但我会从考虑您的列数据类型更改开始。为什么在第一个处理数字数据时将其设置为文本?