我在使用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)
。