如何找到字符列的MAX()值?

时间:2011-07-29 12:49:13

标签: sql db2 ibm-midrange

我们有一个遗留表,其中复合键的一部分列是手动填充值:

code
------
'001'    
'002'    
'099'

现在,我们有一个功能请求,我们必须知道MAX(代码)以便为用户提供下一个可能的值,在下面的值为'100'的示例情况表单中。

我们试图对此进行试验,但我们仍然无法找到任何合理的解释DB2引擎如何计算

MAX('001','099','576')是'576'

MAX('099','99','www')为'99',依此类推。

非常感谢任何帮助或建议!

4 个答案:

答案 0 :(得分:7)

你已经得到了获得最大数值的答案,但回答了关于'www','099','99'的其他部分。

AS / 400使用EBCDIC来存储值,这在几个方面与ASCII不同,对您来说最重要的是Alpha字符位于数字之前,这与Ascii相反。

因此,在您的Max()上,您的3个字符串将被排序,并使用最高的EBCDIC值

  • 'www'
  • '099'
  • '99'

正如你可以看到你的'99'字符串真的是'99'所以它高于带有前导零的字符串。

答案 1 :(得分:2)

在应用max()

之前将其强制转换为int

答案 2 :(得分:1)

这个最大值在您的类型定义中运行良好,当您想要在整数值上执行max时,然后在调用MAX之前将值转换为整数,但是我看到您将max与字符串'www'混合在一起如何设计?

仅过滤整数值,将其强制转换为int并调用max。这不是一个好的设计解决方案,但我认为看你的问题就足够了。

答案 3 :(得分:1)

对于数字最大值 - 过滤掉非数字值并转换为数字进行聚合:

SELECT MAX(INT(FLD1)) 
WHERE FLD1 <> ' ' 
AND TRANSLATE(FLD1, '0123456789', '0123456789') = FLD1

SQL参考:TRANSLATE


合理的解释:

SQL参考:MAX