首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ORACLE在varchar2字段范围内获得越大越低的值

ORACLE在varchar2字段范围内获得越大越低的值
EN

Stack Overflow用户
提问于 2018-10-29 14:57:21
回答 2查看 198关注 0票数 0

我有一个带有字段varchar2类型的表,

假设这个值:

代码语言:javascript
复制
aaab
s123
2445
25
21000
2500000
1
10000790
1899

我需要获得从2开始的更大的价值。

我试着:

代码语言:javascript
复制
Select TO_NUMBER(myfield) from Services where myfield like '2%';

我得到了

代码语言:javascript
复制
2445
25
21000
2500000

现在,我想获得越大越小的值252500000

我试着:

代码语言:javascript
复制
Select TO_NUMBER(myfield) from Services where myfield like '2%' ORDER BY myfield DESC;

代码语言:javascript
复制
Select MAX(TO_NUMBER(myfield)) from Services where myfield like '2%';

Select MIN(TO_NUMBER(myfield)) from Services where myfield like '2%';

我得到:

代码语言:javascript
复制
01722. 00000 -  "invalid number"
*Cause:    The specified number was invalid.
*Action:   Specify a valid number.
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-29 16:03:59

您需要验证所有数字为数字/数字。

包括此验证

代码语言:javascript
复制
 SELECT * FROM Services WHERE myfield LIKE '2%' AND REGEXP_LIKE (myfield, '^[[:digit:]]+$')

获得最大值和最小值

代码语言:javascript
复制
SELECT MAX(TO_NUMBER(myfield)), MIN(TO_NUMBER(myfield))
from (SELECT * FROM Services WHERE myfield LIKE '2%' AND REGEXP_LIKE (myfield, '^[[:digit:]]+$'))

现在,在Radagast81之后,

代码语言:javascript
复制
SELECT TO_NUMBER(myfield)
    from (SELECT * FROM Services WHERE myfield LIKE '3%' AND REGEXP_LIKE (myfield, '^[[:digit:]]+$'))
ORDER BY 1 DESC;
票数 1
EN

Stack Overflow用户

发布于 2018-10-29 15:08:06

Oracle执行大多数函数调用,不管该行是否为结果集的一部分。为了确保只对结果集的值调用函数,将where条件放在子查询中:

代码语言:javascript
复制
Select TO_NUMBER(myfield) 
  from (SELECT * from Services where myfield like '2%')
 ORDER BY 1 DESC

如果不确定表中的每个值都是数字,最好编写自己的pl/sql函数:

代码语言:javascript
复制
CREATE FUNCTION my_to_number(val IN VARCHAR2) RETURN NUMBER IS
BEGIN 
  RETURN TO_NUMBER(val);
EXCEPTION
  WHEN VALUE_ERROR THEN 
    RETURN NULL;
END;

然后使用这个函数获取您的值:

代码语言:javascript
复制
Select MY_TO_NUMBER(myfield) 
  from Services where myfield like '2%'
 ORDER BY 1 DESC
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53048182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档