我有按行和价格数组排序我的表的问题。 下面是示例行:
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
但仍然错了......有任何线索吗?
答案 0 :(得分:1)
你非常接近。如果我这样做,我会使用(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)
。