1

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

  • 马里奥
  • 飞机
  • 尸变
  • 4十字数独
  • 20十字数独
  • 15十字数独
  • 模拟城市

我如何排序以首先具有文本,然后对以数字为前缀的文本进行排序。

需要输出:

  • 尸变
  • 飞机
  • 马里奥
  • 模拟城市
  • 4十字数独
  • 15十字数独
  • 20十字数独
4

4 回答 4

1

你可以试试这个

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

输出:

| 第 1 列 |
------------------
| 邪恶的死者 |
| 飞机 |
| 马里奥 |
| 模拟城市 |
| 4 十字数独 |
| 15十字数独 |
| 20十字数独 |

这是SQLFiddle演示

于 2013-07-18T08:50:14.580 回答
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];
于 2013-07-18T09:22:34.587 回答
0

SQL中对列进行排序的语法如下:

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

您可以根据需要按任意多的列进行排序(我在此示例中使用了三列),并且可以将 ASC 替换为 DESC 以进行升序或降序排序。

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

于 2013-07-18T08:44:52.713 回答
0

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

select columnName from table ORDER BY round(columnName) ASC, columnName ASC
于 2013-07-18T09:12:14.240 回答