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网站上找不到它是如何工作的,所以我想这里有人知道它是如何工作的。我想你完全回答了我问自己的问题。我的问题写得不好(其他人,对不起)。我知道我可以将值转换为数字类型,我只是想知道这是如何工作的。谢谢你,简。