5

我在尝试检索最大课程 ID 时遇到问题

数据:

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 开头的 courseid。

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

4

3 回答 3

6

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

MAX(CAST(SUBSTRING(courseid FROM 4) AS UNSIGNED))
于 2013-07-10T06:47:57.403 回答
1

提供的许多纯 sql 解决方案应该假设所有课程都以三个字符的前缀后跟数字的格式来工作。我虽然我会加入一个 php 解决方案。

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

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

然后

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

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

于 2013-07-10T07:01:15.220 回答
0

利用:

SELECT MAX(CAST(SUBSTRING(courseid,4) AS UNSIGNED)) 
FROM tblcourse 
WHERE courseid LIKE '%JAS%'
于 2013-07-10T06:52:49.033 回答