2010-12-13 77 views
2

如何排序数据而不是按字典顺序排列这些数据?mysql与数字排序varchar

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 

我需要以某种方式做的是增加了一个零的那种情况,这样,我可以让他们在订货之前我想要。

有两个colums,一个存储100(下划线之前的数字)和一个存储下划线之后的值1A。

我须藤废话选择

select thiscolum this table 
order by blockid, plotid(+1 zero to prefix if len(plotid) < 2) 

例如,如果情节值是1A,做最好的排序,我需要它被看作是01A,这样说到10A之前。

+1

在写一个问题时,请考虑一下如何在首页显示前两行时出现问题。把最重要的事情放在第一位。在你的问题中包括一些测试数据是好的,但把它放在最后。 – 2010-12-13 21:04:45

+2

什么是前缀“100_”?它会改变吗? – Flinsch 2010-12-13 21:05:03

+0

前缀100可以改变记录,同样它可能包含99的值。在那里我也想用前导零作为它的前缀,如果它的长度不是3的话。 – 2010-12-13 21:12:16

回答

7
order by length(blockid), blockid, length(plotid), plotid 
+0

我试过这个,得到一个错误: FUNCTION databasename.len不存在。 – 2010-12-13 21:15:52

+0

好的,尝试使用'length'而不是'len'。我也在这个方向纠正了我的帖子。 – Flinsch 2010-12-13 21:26:51

+0

谢谢你的回复。非常简单,但从我所能看到的是正在做我所需要的。你可以用一个傻瓜来打扰我为什么这个工程。 – 2010-12-13 21:31:35