首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Oracle SQL MAX函数不返回VARCHAR上的max到数字转换

Oracle SQL MAX函数不返回VARCHAR上的max到数字转换
EN

Stack Overflow用户
提问于 2014-11-04 15:51:19
回答 3查看 6K关注 0票数 2

我试图从一组行中获得最高的系统编号。系统号前面是SYS,因此select SYSTEM_ID from TABLE将产生{SYS901,SYS87,SYS3024.....}

这是我试图使用的查询:

select MAX(REPLACE(SYSTEM_ID,'SYS','')) from TABLE

可能的结果是

{901,87,3024,20,1}

它正在返回901值,我希望在这里看到3024值。我认为问题在于字段是一个VARCHAR,而不是NUMBER。如何解决这个问题,我不知道。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-11-04 15:53:33

代码语言:javascript
复制
select MAX(TO_NUMBER(REPLACE(SYSTEM_ID,'SYS',''))) from TABLE;

使用TO_NUMBER将VARCHAR2转换为数字,否则Oracle将使用其ASCII代码('9‘> '3')对字符串进行比较

票数 11
EN

Stack Overflow用户

发布于 2014-11-04 15:54:14

当然,它是返回最大值。它只是根据字符串比较的规则返回最大值,而不是数字。

若要获得数字最大值,请执行以下转换:

代码语言:javascript
复制
select MAX(TO_NUMBER(REPLACE(SYSTEM_ID, 'SYS', ''))) from TABLE
票数 5
EN

Stack Overflow用户

发布于 2014-11-04 16:00:23

如果表中有‘SYS5001B’这样的值,您可能需要考虑进行“安全”数字转换:

代码语言:javascript
复制
SELECT MAX( TO_NUMBER( COALESCE( REGEXP_SUBSTR( system_id, '\d+' ), '0' ) ) )
  FROM table
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26739381

复制
相关文章

相似问题

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