ORACLE 获取varchar2字段范围内的较大值和较小值
ORACLE Obtain the greater and lower value in a varchar2 field range
我有一个 table 字段类型为 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.
无论该行是否是结果集的一部分,Oracle 都会执行大多数函数调用。为确保仅针对结果集的值调用该函数,请将 where 条件放在子查询中:
Select TO_NUMBER(myfield)
from (SELECT * from Services where myfield like '2%')
ORDER BY 1 DESC
如果您不确定,table 的每个值都是一个数字,最好编写您自己的 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 DESC
您需要验证所有数字都是 number/digits。
包括此验证
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;
我有一个 table 字段类型为 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.
无论该行是否是结果集的一部分,Oracle 都会执行大多数函数调用。为确保仅针对结果集的值调用该函数,请将 where 条件放在子查询中:
Select TO_NUMBER(myfield)
from (SELECT * from Services where myfield like '2%')
ORDER BY 1 DESC
如果您不确定,table 的每个值都是一个数字,最好编写您自己的 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 DESC
您需要验证所有数字都是 number/digits。
包括此验证
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;