MYSQL:select的意外结果

时间:2015-12-14 15:30:05

标签: mysql sql

我有一个数据库跟踪产品批号,批次的格式如下。

字段:outerbatchcode 例如:GA1509007-3

我有一个已经在数千条记录上工作超过一年的选择,以找到当前最高批次。

SELECT MAX(CAST(SUBSTRING(outerbatchcode, 10, length(outerbatchcode)-9) AS UNSIGNED)) AS batchcode
FROM batchtracking
where prodid = 201

这通常会拉回1,2等

在这个和其他一些案例中,目前正在退回以下风格

18446744073709551615

任何想法为什么它不会像预期的那样撤回3?

1 个答案:

答案 0 :(得分:6)

问题显然是您的代码不符合您预期的格式。您的值非常接近bigint的最大值,这表示您获得了负值。负值可能来自格式化代码中的连字符。换句话说,您将“-3”转换为无符号而不是“3”。

我建议改为使用substring_index()

select max(cast(substring_index(outerbatchcode, '-', -1) as unsigned))
from batchtracking
where prodid = 201;