我有一个id为(Varchar)的表
-----------------------------------------
ID |NAME |COLUMN1 |COLUMN2 |
-----------------------------------------
11.10 |abcd |New col | new col |
11.10(a) |abcd |New col | New Col 2|
11.50 |abcd |New COl | New coli |
11.50(a1) |abcd |New col | New Col 2|
11.50(a2) |abcd |New col | New Col 2|
11.300(a) |abcd |New col | New Col 2|
11.200(a) |abcd |New col | New Col 2|
11.100(a) |abcd |New col | New Col 2|
11.40(a) |abcd |New col | New Col 2|
现在,如果我使用以下命令获取排序后的数据:
Select * from table order by length(id) asc,id;
我得到的结果是
11.10
11.50
11.10(a)
11.100(a)
11.200(a)
11.300(a)
11.40(a)
11.50(a)
11.50(a1)
但我希望期望的输出如下所示
11.10
11.10(a)
11.40(a)
11.50
11.50(a)
11.50(a2)
11.200(a)
11.300(a)
对于相同的查询,合适的查询是什么?我已经使用CAST尝试过了,但是我得到了想要的输出。
发布于 2018-08-07 18:38:32
对于您的示例,您可以只使用length()
order by length(id), id
一种稍微更通用的方法使用substring_index()
和隐式转换:
order by substring_index(id, '.', 1) + 0,
substring_index(id, '.', -1) + 0,
id
发布于 2018-08-07 19:23:11
Select Convert(Id,UNSIGNED INTEGER) AS num, col1, col2, col3 from Table Order By num
这就像甲骨文的To_Number一样工作,所以我建议它会很有用
https://stackoverflow.com/questions/51724704
复制相似问题