Mysql 如何按列的一部分排序
我有如下内容的字段:Mysql 如何按列的一部分排序,mysql,sql,Mysql,Sql,我有如下内容的字段:1,2100前两个数字可以是任意大小,第三个数字最多可以是100 现在我需要按第三个数字对字段进行排序,但由于我还有另外两个数字,我不知道如何进行排序 也许我可以使用类似于REGEXP或其他的东西? 到目前为止,我已经尝试了子字符串,但由于我的两个数字可以是任意长度,所以 order by SUBSTRING(my_field, 4) 可以,但如果我有像32451,30这样的数字,它就需要错误的数字 我还使用php来构建我的查询,但我认为这无关紧要。您可以使用。比如: SU
1,2100
前两个数字可以是任意大小,第三个数字最多可以是100
现在我需要按第三个数字对字段进行排序,但由于我还有另外两个数字,我不知道如何进行排序
也许我可以使用类似于REGEXP
或其他的东西?
到目前为止,我已经尝试了子字符串
,但由于我的两个数字可以是任意长度,所以
order by SUBSTRING(my_field, 4)
可以,但如果我有像32451,30这样的数字,它就需要错误的数字
我还使用php来构建我的查询,但我认为这无关紧要。您可以使用。比如:
SUBSTRING_INDEX(my_field, ',', -1)
编辑:如果您有空间,您可能还需要进行一些修剪。这应该可以:
SELECT *
FROM (
SELECT
SUBSTRING(my_field, 4) AS my_field,
...
FROM
...
WHERE
...
) temp_table
ORDER BY my_field
order by CONVERT(SUBSTRING(my_field, LOCATE(",", my_field, RIGHT)), INTEGER)
使用,它将获取分隔符第n次出现之前的子字符串(在您的示例中为逗号),或者,如果为负n,它将在从末尾开始的第n次出现之后返回子字符串
要了解我的意思,请尝试:
SELECT SUBSTRING_INDEX(my_field,',',-1)
FROM my_table
在ORDER BY
中有一个+0
的原因是mysql将这些排序为数字,而不是字符串。听起来像是一个糟糕的db方案……这个+0太棒了,我完全忘记了那个小把戏!此外,您可能还想尝试@mathematic.coffee建议的+0。这是一个可爱的小把戏。
SELECT SUBSTRING_INDEX(my_field,',',-1)
FROM my_table