我有一个数据库跟踪产品批号,批次的格式如下。
字段: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?
答案 0 :(得分:6)
问题显然是您的代码不符合您预期的格式。您的值非常接近bigint
的最大值,这表示您获得了负值。负值可能来自格式化代码中的连字符。换句话说,您将“-3”转换为无符号而不是“3”。
我建议改为使用substring_index()
:
select max(cast(substring_index(outerbatchcode, '-', -1) as unsigned))
from batchtracking
where prodid = 201;