【发布时间】:2011-02-08 23:00:42
【问题描述】:
我正在尝试对字符串列进行排序(包含数字)。
// SELECT `name` FROM `mytable` ORDER BY `name` ASC
+----------+
+-- name --+
+----------+
+-- a 1 ---+
+-- a 12 --+
+-- a 2 ---+
+-- a 3 ---+
你看到 Mysql 的自然排序算法是把 a 12 放在 a 1 之后(这对大多数应用程序来说都可以),但我有独特的需求,所以我希望结果应该像这样排序.
+----------+
+-- name --+
+----------+
+-- a 1 ---+
+-- a 2 ---+
+-- a 3 ---+
+-- a 12 --+
是否可以仅使用 SQL,或者我必须在应用程序级别操作结果集?
【问题讨论】:
-
所有行的字母前缀是否总是固定长度?
-
不,这是一个经常重复的常规字符串。
-
那么像
order by left(name,1), cast(SUBSTRING(name,2) as int)这样的东西就行不通了。您能否提供一些更多样化的数据来说明您的确切需求? -
@Martin MySQL 强制转换不适用于
int必须使用signed.... 但即使您的评论是very precious... 因为您对两个子字符串使用了双重排序. -
替代解决方案:
SELECT * FROM mytable ORDER BY length(name), name;性能好 :)
标签: sql mysql sql-order-by