最大子串 - Informix

时间:2015-10-01 09:22:54

标签: sql substring informix

我必须向您提供有关Informix的SQL查询的帮助,并且非常感谢任何评论。

contno字段(varchar)的数据如下所示:

C4698  
B0458  
F400221  
D3776  
A0636  
D3787  
B7781  
D13799  
BXXXXX

我需要在contno字符串中找到一个跟在字母后面的数字的最大值,所以试过:

SELECT Max(to_number(contno[2,6]))
FROM informix.customer
WHERE contno[1,1] = "B"

......但是

Error: A character to numeric conversion process failed (State:37000, Native Code: FFFFFB43)

同时排除' BXXXX'价值似乎不起作用。啊,并尝试了SUBSTRING功能,结果相同。

跳过最大功能并运行时:

SELECT to_number(contno[2,6])
FROM informix.customer
WHERE contno[1,1] = "B"

...我看起来很漂亮:

4698.0  
458.0  
400221.0  
3776.0  
0636.0  
3787.0  
7781.0  
13799.0

...但在尝试ORDER BY时遇到同样的错误。

知道如何解决我的问题吗?

1 个答案:

答案 0 :(得分:1)

尝试使用MATCHES运算符仅获取数字:

SELECT  MAX(contno[2,6]::INT)
FROM    customer
WHERE   contno[1,1] = "B"
        AND (
                contno[2,6] MATCHES '[0-9][0-9][0-9][0-9][0-9]'
            OR  contno[2,6] MATCHES '[0-9][0-9][0-9][0-9]'
            OR  contno[2,6] MATCHES '[0-9][0-9][0-9]'
            OR  contno[2,6] MATCHES '[0-9][0-9]'
            OR  contno[2,6] MATCHES '[0-9]'
        );