获取列值的最大序列仅为数字

时间:2017-05-25 07:42:14

标签: sql oracle

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   

1 个答案:

答案 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>