我有一个带有字段varchar2类型的表,
假设这个值:
aaab
s123
2445
25
21000
2500000
1
10000790
1899我需要获得从2开始的更大的价值。
我试着:
Select TO_NUMBER(myfield) from Services where myfield like '2%';我得到了
2445
25
21000
2500000现在,我想获得越大越小的值25和2500000。
我试着:
Select TO_NUMBER(myfield) from Services where myfield like '2%' ORDER BY myfield DESC;和
Select MAX(TO_NUMBER(myfield)) from Services where myfield like '2%';
Select MIN(TO_NUMBER(myfield)) from Services where myfield like '2%';我得到:
01722. 00000 - "invalid number"
*Cause: The specified number was invalid.
*Action: Specify a valid number.发布于 2018-10-29 16:03:59
您需要验证所有数字为数字/数字。
包括此验证
SELECT * FROM Services WHERE myfield LIKE '2%' AND REGEXP_LIKE (myfield, '^[[:digit:]]+$')获得最大值和最小值
SELECT MAX(TO_NUMBER(myfield)), MIN(TO_NUMBER(myfield))
from (SELECT * FROM Services WHERE myfield LIKE '2%' AND REGEXP_LIKE (myfield, '^[[:digit:]]+$'))现在,在Radagast81之后,
SELECT TO_NUMBER(myfield)
from (SELECT * FROM Services WHERE myfield LIKE '3%' AND REGEXP_LIKE (myfield, '^[[:digit:]]+$'))
ORDER BY 1 DESC;发布于 2018-10-29 15:08:06
Oracle执行大多数函数调用,不管该行是否为结果集的一部分。为了确保只对结果集的值调用函数,将where条件放在子查询中:
Select TO_NUMBER(myfield)
from (SELECT * from Services where myfield like '2%')
ORDER BY 1 DESC如果不确定表中的每个值都是数字,最好编写自己的pl/sql函数:
CREATE FUNCTION my_to_number(val IN VARCHAR2) RETURN NUMBER IS
BEGIN
RETURN TO_NUMBER(val);
EXCEPTION
WHEN VALUE_ERROR THEN
RETURN NULL;
END;然后使用这个函数获取您的值:
Select MY_TO_NUMBER(myfield)
from Services where myfield like '2%'
ORDER BY 1 DESChttps://stackoverflow.com/questions/53048182
复制相似问题