我有一个表,它的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,但我得到了想要的输出。
3条答案
按热度按时间sirbozc51#
Select Convert(Id,UNSIGNED INTEGER) AS num, col1, col2, col3 from Table Order By num
这是甲骨文的to\ u编号,所以我建议它会很有用qlvxas9a2#
您想要的查询可能是:
sql fiddle演示
hsgswve43#
举个例子,你可以用
length()
:更一般的方法是
substring_index()
和隐式转换: