我无法尝试检索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。我错过了什么吗?
答案 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%'