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