Mysql 选择查询字符数字标识以按描述排序

Mysql 选择查询字符数字标识以按描述排序,mysql,sql,sql-order-by,natural-sort,Mysql,Sql,Sql Order By,Natural Sort,我有示例数据 SMMP022011304196 SMMP022011304199 SMMP022011304197 SMMP022011304193 SMMP022011304195 SMMP022011304198 SMMP022011304192 SMMP0220113041910 SMMP022011304191 SMMP022011304194 如果我使用按myfield DESC从mytable order中选择myfield 我得到了这

我有示例数据

SMMP022011304196
SMMP022011304199    
SMMP022011304197    
SMMP022011304193
SMMP022011304195    
SMMP022011304198    
SMMP022011304192    
SMMP0220113041910   
SMMP022011304191
SMMP022011304194
如果我使用
按myfield DESC从mytable order中选择myfield
我得到了这样的结果

SMMP022011304199    
SMMP022011304198    
SMMP022011304197    
SMMP022011304196    
SMMP022011304195    
SMMP022011304194    
SMMP022011304193    
SMMP022011304192    
SMMP0220113041910   
SMMP022011304191
请帮助做出如下结果:

SMMP0220113041910   
SMMP022011304199    
SMMP022011304198    
SMMP022011304197    
SMMP022011304196    
SMMP022011304195    
SMMP022011304194    
SMMP022011304193    
SMMP022011304192    
SMMP022011304191

如果数据前面总是有SMMP,您可以使用以下命令:

ORDER BY LPAD(REPLACE(myfield,'SMMP',''),15,'0') desc;

此方法的逻辑是忽略前面的4个字符,只对后面的数字进行排序。

如果数据前面总是有SMMP,可以使用以下方法:

ORDER BY LPAD(REPLACE(myfield,'SMMP',''),15,'0') desc;

此方法的逻辑是忽略前面的4个字符,只对后面的数字进行排序。

只需按字段长度排序,然后对长度相等的值进行排序:

SELECT myfield from mytable order by 
LENGTH(myfield) DESC,
myfield DESC

只需按字段长度排序,然后对长度相等的值进行排序:

SELECT myfield from mytable order by 
LENGTH(myfield) DESC,
myfield DESC

在我前面的评论之后,排序如下:-

SELECT myfield
FROM mytable
ORDER BY SUBSTRING(myfield, 1, 4) DESC, cast(SUBSTRING(myfield, 5) AS unsigned) DESC

注意:仅当您的字段采用固定格式,包含4个字符,后跟数字时,此选项才起作用。

在我前面的注释之后,按如下顺序排序:-

SELECT myfield
FROM mytable
ORDER BY SUBSTRING(myfield, 1, 4) DESC, cast(SUBSTRING(myfield, 5) AS unsigned) DESC
注意:只有当您的字段采用固定格式,后跟4个字符和数字时,此选项才起作用。这很好。 以下代码适用于SQL Server 2008 R2:

SELECT 
   myfield  
FROM mytable 
ORDER BY 
    LEN(myfield) DESC 
    ,myfield DESC
这很好用。 以下代码适用于SQL Server 2008 R2:

SELECT 
   myfield  
FROM mytable 
ORDER BY 
    LEN(myfield) DESC 
    ,myfield DESC

格式是否总是这样(即,4个字符后跟数字)?之所以使用这种排序顺序,是因为MySQL将其排序为字符串,而不是后跟数字的字符串。因此,您需要将其分为字符部分和数字部分,将数字部分转换为数字字段,然后按这两个字段进行排序。格式是否总是这样(即,4个字符后跟数字)?之所以使用这种排序顺序,是因为MySQL将其排序为字符串,而不是后跟数字的字符串。因此,您需要将其分为字符部分和数字部分,将数字部分转换为数字字段,然后按这两个字段进行排序。如果不总是在我的数据前面使用SMMP,那么您的数据是否总是以4个字符开头?请注意Kickstart解决方案。如果您的数据前面总是有4个字符,您可以参考@Kickstart解决方案。如果不总是在我的数据前面有SMMP,那么您的数据是否总是以4个字符开头?请注意Kickstart解决方案。如果您的数据前面总是有4个字符,您可以参考@Kickstart解决方案。这是一种聪明而有效的方法。我能看到的唯一缺陷是,如果数字部分有一个额外的前导0,在这种情况下,长度会增加,但数字部分的值不会增加。然而,对于大多数需要进行排序的情况,这很可能是不相关的。这是一种聪明而有效的方法。我能看到的唯一缺陷是,如果数字部分有一个额外的前导0,在这种情况下,长度会增加,但数字部分的值不会增加。然而,对于大多数需要进行此类排序的情况,这很可能是不相关的。