Mysql 使用字符串和整数组合排序
Mysql Order by with string and integer combination
我在 mysql 中有一列 table 包含不同类型的值...
A-1
A-2
B-7
AA-1
B-1
C-2
所有行中唯一常见的是“-”。
但是我想重新排列所有值是这样的...
A-1
A-2
AA-1
B-1
B-7
C-2
我尝试了几个流程订单,例如
ORDER BY col+0
ORDER BY cast(col as unsigned)
ORDER BY length(col),col
ORDER BY CAST(col AS SIGNED) ASC
ORDER BY ABS(col)
None 其中的工作按预期进行。有什么想法吗?
这会起作用:
ORDER BY SUBSTRING_INDEX(col, '-', 1),
CAST(SUBSTRING_INDEX(col, '-', -1) AS UNSIGNED)
在此处阅读有关此功能的更多信息:https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_substring-index
但是,这对性能不利,因为它必须为每一行生成这些子字符串,然后手动对它们进行排序。
如果您使用 MySQL 5.7 或更高版本,您可以为它们创建虚拟列和索引:
ALTER TABLE MyTable
ADD COLUMN col_field1 VARCHAR(2), AS (SUBSTRING_INDEX(col, '-', 1)),
ADD COLUMN col_field2 INT UNSIGNED AS (SUBSTRING_INDEX(col, '-', -1)),
ADD INDEX (col_field1, col_field2);
然后您可以按索引虚拟列排序:
ORDER BY col_field1, col_field2
我在 mysql 中有一列 table 包含不同类型的值...
A-1
A-2
B-7
AA-1
B-1
C-2
所有行中唯一常见的是“-”。
但是我想重新排列所有值是这样的...
A-1
A-2
AA-1
B-1
B-7
C-2
我尝试了几个流程订单,例如
ORDER BY col+0
ORDER BY cast(col as unsigned)
ORDER BY length(col),col
ORDER BY CAST(col AS SIGNED) ASC
ORDER BY ABS(col)
None 其中的工作按预期进行。有什么想法吗?
这会起作用:
ORDER BY SUBSTRING_INDEX(col, '-', 1),
CAST(SUBSTRING_INDEX(col, '-', -1) AS UNSIGNED)
在此处阅读有关此功能的更多信息:https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_substring-index
但是,这对性能不利,因为它必须为每一行生成这些子字符串,然后手动对它们进行排序。
如果您使用 MySQL 5.7 或更高版本,您可以为它们创建虚拟列和索引:
ALTER TABLE MyTable
ADD COLUMN col_field1 VARCHAR(2), AS (SUBSTRING_INDEX(col, '-', 1)),
ADD COLUMN col_field2 INT UNSIGNED AS (SUBSTRING_INDEX(col, '-', -1)),
ADD INDEX (col_field1, col_field2);
然后您可以按索引虚拟列排序:
ORDER BY col_field1, col_field2