mysql使用数字对varchar进行排序

mysql使用数字对varchar进行排序,mysql,sql-order-by,Mysql,Sql Order By,如何对这些数据进行数字排序而不是按字典排序 100_10A 100_10B 100_10C 100_11A 100_11B 100_11C 100_12A 100_12B 100_12C 100_13A 100_13B 100_13C 100_14A 100_14B 100_14C 100_15A 100_15B 100_15C 100_16A 100_16B 100_16C 100_1A 100_1B

如何对这些数据进行数字排序而不是按字典排序

100_10A  
100_10B  
100_10C  
100_11A  
100_11B  
100_11C  
100_12A  
100_12B  
100_12C  
100_13A  
100_13B  
100_13C  
100_14A  
100_14B  
100_14C  
100_15A  
100_15B  
100_15C  
100_16A  
100_16B  
100_16C  
100_1A  
100_1B  
100_1C  
100_2A  
100_2B  
100_2C  
100_3A  
100_3B  
100_3C  
100_4A  
100_4B  
100_4C  
100_5A  
100_5B  
100_5C  
100_6A  
100_6B  
100_6C  
100_7A  
100_7B  
100_7C  
100_8A  
100_8B  
100_8C  
100_9A  
100_9B  
100_9C  

select generalcolum from mytable order by blockid, plotid ASC
我需要从这种顺序中得到的是

100_1A
100_1B
100_1C...
...
...
100_10A
100_10B
100_10C
我需要做的是在排序之前加上一个零,这样我就可以按照我想要的顺序得到它们

有两个列,一个存储100(下划线前的数字),另一个存储下划线后的值

我的sudo垃圾

select thiscolum this table
order by blockid, plotid(+1 zero to prefix if len(plotid) < 2)
在此表中选择此列
按块ID、plotid排序(如果len(plotid)<2,则前缀+1零)

例如,如果绘图值为1A,为了进行最佳排序,我需要将其视为01A,使其位于10A之前。

在编写问题时,请考虑当主页上仅显示前两行时,它将如何显示。把最重要的事情放在第一位。在你的问题中包括一些测试数据是可以的,但是把它放在最后。前缀“100”是什么?它会改变吗?前缀100可以改变记录,同样,它可能包含99的值。在这里,如果长度不是3,我还想在它前面加一个前导零。php有这个函数,但这显然只有在这里使用php时才有用。我正在使用php,mysqlI尝试了这个方法,但得到了一个错误:function databasename.len不存在。好的,尝试使用
length
而不是
len
。我也向这个方向更正了我的帖子。谢谢你的回复。非常简单,但从我所看到的情况来看,这正是我所需要的。你能给我一个傻瓜的例子解释一下为什么这样做吗?因为“1A”,“1B”,“2B”,“1A”,“2B”,“1A”,“1B”,“1A”,“1B”,“1A”,“1B”,“1A”,“1B”,“1A”,“1B”,“1A”,“1B”,“1A”,“1B”,“1A”,“1B”,“1A。。。等等比“10A”、“10B”等短。因此,按升序排序,例如,“1A”出现在“10A”之前。它似乎起作用。但并非完全如此。我在整理14000条左右的记录,这似乎适用于大群体,但不知何故排序不正确。
order by length(blockid), blockid, length(plotid), plotid