MySQL按行中数组的第一个元素排序


MySQL order by first element of array in row

我在使用price数组按行排序表时遇到问题。以下示例行:

1) ;100
2) ;50
3) ;50;100;300
4) ;30;150

我想按数组的第一个元素排序当我按价格行ASC订购时,我得到:

1) ;100
2) ;30;150
3) ;50
4) ;50;100;300

这是错误的结果,因为"100"应该是最后一个。。。我试过了:

ORDER BY CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(`price`, ';', 2), ';', 1) AS INT(3) ASC

但还是错了。。。有线索吗?

你非常接近。如果我这样做,我会使用(http://sqlfiddle.com/#!2/f57af/6/0)

 ORDER BY 0+TRIM(LEADING ';' FROM price)

这是通过去掉任何分号来实现的,然后(通过0+技巧)将price列的初始字符视为整数,而不是文本。

你也可以做

ORDER BY 0+SUBSTRING_INDEX(SUBSTRING_INDEX(val,';',2), ';', -1)

ORDER BY CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(val,';',2), ';', -1) AS INTEGER)

你有两个问题。首先,外部SUBSTRING_INDEX操作需要第三个参数-1。其次,您将强制转换为INTEGER,而不是INT(3)