mySQL max()没有返回最大结果

时间:2013-07-10 06:46:25

标签: mysql

我无法尝试检索max courseid

数据:

coursename    courseid    
----------    --------
0001_Course   JAS9997
0002_Course   JAS9998
0003_Course   JAS9999
0004_Course   JAS10000

查询:

SELECT max(courseid) FROM tblcourse WHERE courseid LIKE '%JAS%'

LIKE将缩小到以JAS开头的标准。

查询仅返回JAS9999作为最大结果,但最大courseid为JAS10000。我错过了什么吗?

3 个答案:

答案 0 :(得分:6)

对于像这样嵌入在文本中的数字,它不能MAX。它按字母顺序排序,因此JAS9追求JAS1。您必须在子字符串上执行max:

MAX(CAST(SUBSTRING(courseid FROM 4) AS UNSIGNED))

答案 1 :(得分:1)

许多提供的纯SQL解决方案应该假设所有课程都使用三个字符前缀后跟数字。我虽然会投入PHP解决方案。

首先获取与数组中的like子句匹配的所有课程。

 $matching = array();
 while ($matching[] = $query->fetchNext()){}

然后

natsort($matching);
$last = end($matching);

最后将包含您案例中的最后一个JAS10000

答案 2 :(得分:0)

使用:

SELECT MAX(CAST(SUBSTRING(courseid,4) AS UNSIGNED)) 
FROM tblcourse 
WHERE courseid LIKE '%JAS%'