我必须向您提供有关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时遇到同样的错误。
知道如何解决我的问题吗?
答案 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]'
);