oracle中取某个字段最大值问题

2025-05-08 11:54:06
推荐回答(4个)
回答1:

可以写一个function,把字母都过滤掉,只剩下数字,然后就可以根据数字排序了

CREATE OR REPLACE FUNCTION GETNUMBER(STR IN VARCHAR2) RETURN VARCHAR2 IS
  V_TEMP   VARCHAR2(200);
  V_RETURN VARCHAR2(200);
  IDX      NUMBER := 1;
BEGIN
  WHILE (IDX <= LENGTH(STR)) LOOP
    V_TEMP := SUBSTR(STR, IDX, 1);
    IF (ASCII(UPPER(V_TEMP)) >= 48 AND ASCII(UPPER(V_TEMP)) <= 57) THEN
      V_RETURN := V_RETURN || V_TEMP;
    END IF;
    IDX := IDX + 1;
  END LOOP;
  RETURN V_RETURN;
END GETNUMBER;

回答2:

你可以选择先全部取出来,然后在java中进行正则匹配将非数字的去除,最后,将剩下的转换为int类型。取最大值。

回答3:

select max(字段名) from 表名;在我这他是跟好数字的大小取的最大值,不是先根据字母,你的字段的数字与字母出现的间隔有规律没有,有的话就用substr 截取 在max();

回答4:

select max(to_number(col1))
from table
where nvl2(translate(col1,'\0123456789','\'),0,1)=1