Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何按列的一部分排序_Mysql_Sql - Fatal编程技术网

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