在我的数据库中的表中,有一个varchar2列,主要由数字组成。现在我想要接收该列的NUMERICAL最大值,忽略非数值。 我怎么做? 谢谢。
答案 0 :(得分:3)
当您尝试将字符串转换为数字时,有很多陷阱和异常。我使用这样的函数:
FUNCTION Is_Numeric(Expression IN VARCHAR2) RETURN INTEGER
BEGIN
IF TO_NUMBER(Expression) IS NOT NULL THEN
RETURN 1;
ELSE
RETURN 0;
END IF;
EXCEPTION
WHEN VALUE_ERROR OR INVALID_NUMBER THEN
RETURN 0;
END Is_Numeric;
然后你可以在任何WHERE条件下使用它。
答案 1 :(得分:1)
您需要确定该数字是否为数字。这是正整数的一种方法:
select max(case when LENGTH(TRIM(TRANSLATE(string1, ' 0123456789', ' '))) is null
then cast(string1 as integer)
end)
. . .
如果您有其他数字格式(浮点数,负值,指数),那么可以为这些格式添加适当的测试。
顺便说一句,网上充满了建议,使用类似的东西:
LENGTH(TRIM(TRANSLATE(myfield, ' +-.0123456789', ' '))) is null
请注意,因为'1+1'
和'...'
等字符串会通过此测试。
答案 2 :(得分:1)
SQL> select * from t;
X
----------
1234
836
836AA%%$$
BBcdfrg
12099
SQL> select max(to_number(x)) from t
2 where trim(translate(x,'0123456789',' ')) is null
3 /
MAX(TO_NUMBER(X))
-----------------
12099