MySQL ORDER BY字符串作为数字(大于较小数字的数字)

jsk*_*dd3 4 mysql innodb

考虑以下结果code:type VARCHAR:

SELECT code
FROM lock
ORDER BY CAST(code AS signed) > 0 DESC, `code

|code|
|4   |  
|420 |
|5   |
|T6  |
|X30 |
Run Code Online (Sandbox Code Playgroud)

如何更改查询以便按此顺序返回结果:

|code|
|4   |  
|5   |
|420 |
|T6  |
|X30 |
Run Code Online (Sandbox Code Playgroud)

Ale*_*der 5

SELECT code
FROM lock
ORDER BY CAST(code AS signed) > 0 DESC, CAST(code AS signed) ASC, code ASC
Run Code Online (Sandbox Code Playgroud)

第一个订单将数字排序到前面.第二个订单只会对数字进行排序,而第一个订单会将它们保持在开头.第三个只会对字符串进行排序,数字将保持其顺序,因为它们已经排序.