在Sqllite表中,我在表格中有一个列值,如
我如何排序首先是文本,然后排序前缀为数字的文本。
需要输出:
答案 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
答案 3 :(得分:0)
如果必须在sql中完成,可以使用
select columnName from table ORDER BY round(columnName) ASC, columnName ASC