当前位置:  开发笔记 > 编程语言 > 正文

MYSQL:select的意外结果

如何解决《MYSQL:select的意外结果》经验,为你挑选了1个好方法。

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

字段: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> Gordon Linof..:

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

我建议使用substring_index():

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

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有