SELECT * FROM TABLE;
CUSTNUM SEQ SECTION
--------------------
220684 5 12c
213567 4 33
220684 3 25
213567 6 10
213567 2 a12
220684 1 30
要求oracle 10g查询输出,如下所述。需要获取客户编号的最大序列号,其中部分列值仅为没有任何数字的数字。
SQL> SELECT CUSTNUM,MAX(SEQ) FROM TABLE WHERE REGEXP_LIKE(SECTION,
'^[[:digit:]]+$') BETWEEN 22 AND 50; --- how to use between in regex
CUSTNUM SEQ
--------------------
220684 3
213567 4
答案 0 :(得分:1)
您需要测试SECTION
是否是内部查询中的数字,然后,在筛选出非数字后,您可以过滤外部查询中的数字范围:
SELECT CUSTNUM,
MAX(SEQ)
FROM (
SELECT CUSTNUM,
SEQ,
SECTION
FROM TABLE
WHERE REGEXP_LIKE(SECTION, '^[[:digit:]]+$')
)
WHERE TO_NUMBER( SECTION ) BETWEEN 22 AND 50
GROUP BY CUSTNUM;
如果您尝试在同一个子查询中执行这两个过滤器,则可能会在TO_NUMBER()
之前评估REGEXP_LIKE()
,并且查询将引发非数字行的异常。< / p>