Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 获取列值的最大序列仅为数字_Sql_Oracle - Fatal编程技术网

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

Sql 获取列值的最大序列仅为数字,sql,oracle,Sql,Oracle,从表中选择* 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  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   

您需要测试
部分
是否是内部查询中的数字,然后过滤掉非数字后,您可以过滤外部查询中的数字范围:

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;

如果您尝试在同一个子查询中执行两个筛选器,则可能会在
REGEXP\u LIKE()
之前计算
TO\u NUMBER()
,并且查询将引发非数字行的异常。

我已删除SQL Server标记,因为它是不同的产品,通常需要不同的解决方案。您可以筛选
部分
。您说需要检查
部分
是否只包含数字字符,那么为什么查询中的
介于
之间?您需要做什么?ORA-12729:正则表达式12729中的字符类无效。00000-“正则表达式中的字符类无效”*原因:在正则表达式中发现未知字符类*操作:确保使用的是有效的字符类。@SanjeevAjay正则表达式在Oracle 11g中适用于我,这正是您在问题中使用的正则表达式。您也可以尝试PERL风格的表达式
“^\d+$”
,但Posix应该可以