我在mysql表中有一列包含不同类型的值......
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)
它们都没有按预期工作。有什么想法吗?
答案 0 :(得分:1)
这将有效:
predict
在此处详细了解此功能:https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_substring-index
但是,它对性能不利,因为它必须为每一行生成这些子字符串,然后手动对它们进行排序。
如果您使用MySQL 5.7或更高版本,则可以为它们创建虚拟列和索引:
ORDER BY SUBSTRING_INDEX(col, '-', 1),
CAST(SUBSTRING_INDEX(col, '-', -1) AS UNSIGNED)
然后您可以按索引的虚拟列进行排序:
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);