如何先按文本排序,然后按文本排序

时间:2013-07-18 08:31:31

标签: android sql database sqlite sorting

在Sqllite表中,我在表格中有一个列值,如

  • 马里奥
  • 飞机
  • 邪恶的死亡
  • 4 cross Sudoku
  • 20 cross Sudoku
  • 15 cross Sudoku
  • 模拟城市

我如何排序首先是文本,然后排序前缀为数字的文本。

需要输出:

  • 邪恶的死亡
  • 飞机
  • 马里奥
  • 模拟城市
  • 4 cross Sudoku
  • 15 cross Sudoku
  • 20 cross Sudoku

4 个答案:

答案 0 :(得分:1)

你可以试试这个

SELECT * 
  FROM Table1
 ORDER BY CAST(column1 AS INTEGER), column1

输出:

|         column1 |
-------------------
|       Evil Dead |
|     Fly machine |
|           Mario |
|         SimCity |
|  4 cross Sudoku |
| 15 cross Sudoku |
| 20 cross Sudoku |

这是 SQLFiddle 演示

答案 1 :(得分:1)

SELECT * FROM  [table] ORDER BY [column] GLOB '[0-9]*', [column];

将完成这项工作。

SELECT * FROM [table] ORDER BY CAST([column] AS INTEGER), [column];

可能会更快,但0已启动的字符串将出现在文本之前。

编辑:

更好的选择:

SELECT * FROM [table] ORDER BY TYPEOF([column])='text' DESC, [column];

答案 2 :(得分:0)

SQL中排序列的语法如下:

SELECT   [columns]
FROM     [table(s)]
WHERE    [conditions]
ORDER BY [columnName] ASC, [columnName] ASC, [columnName] ASC

您可以根据需要订购任意数量的列(我在此示例中使用了三个),您可以使用DESC替换ASC以提供升序或降序排序。

http://www.tutorialspoint.com/sqlite/sqlite_order_by.htm

我会在第一个字母上使用IFNULL语句来首先测试一个数字,并将其作为排序顺序的一部分包含在内:

SELECT *
FROM testSort
ORDER BY IFNULL(substr(name,1) + 1, 0), name

http://sqlfiddle.com/#!7/84fe6/9

答案 3 :(得分:0)

如果必须在sql中完成,可以使用

select columnName from table ORDER BY round(columnName) ASC, columnName ASC