Mysql按字符串和整数组合排序

时间:2018-01-06 22:06:24

标签: mysql sql database rdbms

我在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)

它们都没有按预期工作。有什么想法吗?

1 个答案:

答案 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);