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