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应该可以