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

Sql 如何查找字符列的MAX()值?,sql,db2,ibm-midrange,Sql,Db2,Ibm Midrange,我们有一个旧表,其中复合键的一部分列手动填充了值: code ------ '001' '002' '099' 等等 现在,我们有一个特性请求,在这个请求中,我们必须知道MAX(代码),以便给用户下一个可能的值,在示例中,下一个值上面的形式是“100” 我们试图对此进行实验,但仍然找不到任何合理的解释来解释DB2引擎是如何计算的 最大值('001','099','576')为'576' MAX('099','99','www')是'99',依此类推 任何帮助或建议都将不胜感激

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

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

现在,我们有一个特性请求,在这个请求中,我们必须知道MAX(代码),以便给用户下一个可能的值,在示例中,下一个值上面的形式是“100”

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

最大值('001','099','576')为'576'

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


任何帮助或建议都将不胜感激

在应用max()之前将其强制转换为int()

这个max在您的类型定义中工作得很好,当您需要对整数值执行max时,然后在调用max之前将值转换为整数,但是我看到您将max与字符串“www”混合在一起,您认为这是如何工作的

只过滤整数值,将其转换为int并调用max。这不是一个设计良好的解决方案,但考虑到您的问题,我认为已经足够了。

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

SELECT MAX(INT(FLD1)) 
WHERE FLD1 <> ' ' 
AND TRANSLATE(FLD1, '0123456789', '0123456789') = FLD1
选择最大值(INT(FLD1))
其中FLD1“
并翻译(FLD1,'0123456789','0123456789')=FLD1
SQL参考:


合理的解释是:


SQL参考:

您已经有了获取最大数值的答案,但是要回答关于“www”、“099”、“99”的其他部分

AS/400用于存储值,这在几个方面与ASCII不同,最重要的是字母字符位于数字之前,这与ASCII相反

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

  • “www”
  • ‘099’
  • ‘99’

正如您所看到的,您的'99'字符串实际上是'99',因此它比前导为零的字符串要高。

是的,我添加了'www'只是为了看看它是如何工作的,如果它可以将字符转换为ascii,或者比较字符串长度等。我在IBM网站上找不到它是如何工作的,所以我想这里有人知道它是如何工作的。我想你完全回答了我问自己的问题。我的问题写得不好(其他人,对不起)。我知道我可以将值转换为数字类型,我只是想知道这是如何工作的。谢谢你,简。