在 Sqllite 表中,我在表中有一个列值,例如
- 马里奥
- 飞机
- 尸变
- 4十字数独
- 20十字数独
- 15十字数独
- 模拟城市
我如何排序以首先具有文本,然后对以数字为前缀的文本进行排序。
需要输出:
- 尸变
- 飞机
- 马里奥
- 模拟城市
- 4十字数独
- 15十字数独
- 20十字数独
你可以试试这个
SELECT *
FROM Table1
ORDER BY CAST(column1 AS INTEGER), column1
输出:
| 第 1 列 | ------------------ | 邪恶的死者 | | 飞机 | | 马里奥 | | 模拟城市 | | 4 十字数独 | | 15十字数独 | | 20十字数独 |
这是SQLFiddle演示
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];
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
如果这必须在 sql 中完成,您可以使用
select columnName from table ORDER BY round(columnName) ASC, columnName ASC