2012-02-22 58 views
0

我有表和列VARCHAR类型列ID 和值M1,M2,...,M9,M10,M11,M12 然后我使用查询如何查询从varchar类型获取最大ID?

选择MAX(ID)从表

但结果为m9,因为它认为m10为'm','1','0'作为单独的characters.so m9> m1(0)。

请帮忙?如何查询从varchar类型获取最大ID?

+1

字符串比较的定义与一个MySQL(以及大多数其他语言/平台)使用的定义完全不同。试着首先定义你的比较算法(也就是说,给定两个字符串,在你的意义上如何确定它们哪个更大)。在定义之前,我们不能说任何话;很可能是,试图定义它,你会明白你的感觉是不一致的,并且字符串集不能根据你的意思排序,例如,因为违反了传递性。 – penartur 2012-02-22 08:14:01

+0

如果所有的id都是'm1234567'类型,为什么不移除'm'并将列转换为'INT'? – 2012-02-22 09:29:24

回答

1
select max(CAST((substring(id,2)) AS DECIMAL(5,2))) from table; 

应该做的伎俩。

+0

对不起,应该是DECIMAL(5,0) – 2012-02-22 08:17:31

+0

其工作thxü – 2012-02-22 08:26:58

+0

如何获得最大值如果值1, 2,3 ...,10,11,12与varchar类型? – 2012-02-22 08:30:26

2

您可以使用子实现了最大数量

select max(CAST((substring(id,2)) AS DECIMAL(5,0))) from table 

末还可以cancat与 'M'

select concat('m'+ max(CAST((substring(id,2)) AS DECIMAL(5,0)))) from table 
+0

它没有工作:( – 2012-02-22 08:21:55

+0

@ N4ta-nata尝试获得想法。添加投射,然后它应该工作 – Kayser 2012-02-22 08:25:37