我们有一个遗留表,其中复合键的一部分列是手动填充值:
code
------
'001'
'002'
'099'
等
现在,我们有一个功能请求,我们必须知道MAX(代码)以便为用户提供下一个可能的值,在下面的值为'100'的示例情况表单中。
我们试图对此进行试验,但我们仍然无法找到任何合理的解释DB2引擎如何计算
MAX('001','099','576')是'576'
MAX('099','99','www')为'99',依此类推。
非常感谢任何帮助或建议!
答案 0 :(得分:7)
你已经得到了获得最大数值的答案,但回答了关于'www','099','99'的其他部分。
AS / 400使用EBCDIC来存储值,这在几个方面与ASCII不同,对您来说最重要的是Alpha字符位于数字之前,这与Ascii相反。
因此,在您的Max()上,您的3个字符串将被排序,并使用最高的EBCDIC值
正如你可以看到你的'99'字符串真的是'99'所以它高于带有前导零的字符串。
答案 1 :(得分:2)
在应用max()
之前将其强制转换为int答案 2 :(得分:1)
这个最大值在您的类型定义中运行良好,当您想要在整数值上执行max时,然后在调用MAX之前将值转换为整数,但是我看到您将max与字符串'www'混合在一起如何设计?
仅过滤整数值,将其强制转换为int并调用max。这不是一个好的设计解决方案,但我认为看你的问题就足够了。
答案 3 :(得分:1)