【发布时间】:2011-12-31 22:29:14
【问题描述】:
我在 MySQL 数据库中有一系列“编号”的 varchar 字段:
+-----------+
| name |
+-----------+
| thing 1 |
| thing 2 |
| thing 3 |
| ... |
| thing 10 |
| thing 11 |
+-----------+
我想按照上面列出的顺序订购它们。然而,一个简单的ORDER_BY table.name 会产生如下内容:
thing 1
thing 10
thing 11
thing 2
thing 3
...
这是有道理的,因为 MySQL 将整个字段视为字符串 (varchar)。但是,我尝试了多种排序方法,包括CAST(name AS DECIMAL) 和name + 0。这将仅按小数部分排序,忽略字符串部分。这些都不起作用,因为我需要按name first 和 then 排序,然后按尾随小数排序。
我尝试了ORDER_BY name, name + 0,但似乎没有任何效果。我如何在该子集中执行ORDER_BY 然后ORDER_BY? (我认为这会起作用)。
【问题讨论】:
-
在 1 前面放一个 0,所以它在数据中是 01、02、03。如果这不是一个选项,则将左右拆分为单独的字段,如果这不是一个选项,则按顺序将左右部分子串化,然后先按左侧部分,然后按右侧部分(将其转换为 int)
标签: mysql sql-order-by natural-sort