繁体   English   中英

Oracle SQL查询从包含批号的字符串中查找最小值

[英]Oracle SQL query to find min value from a string comprising of batch number

我在Oracle数据库中有一列ID,该列是一个字符串,其值类似859188_1、859188_2、859188_3,...,859188_n。 _之后的值是批号,即1、2、3,...,n。 我需要根据该批号选择最小编号。 最小值是859188_1。

尝试...

 select id
 from yourTable
 where to_number(regexp_substr(ID, '[^_]+$')) =
   (select min(to_number(regexp_substr(t2.ID, '[^_]+$')))
    from yourTable t2
   )

您需要根据_ 之后的部分选择最小值。

如果像您的示例一样,前六个字符都相同,则可以执行以下操作:

select min(id) keep (dense_rank first order by length(id) asc, id asc) as min_id
from t;

也许像这样...

with
     inputs ( id ) as (
       select '100_1'  from dual union all
       select '100_3'  from dual union all
       select '100_12' from dual union all
       select '101_3'  from dual union all
       select '101_5'  from dual union all
       select '101_9'  from dual
     )
-- end of test data; solution (SQL query) begins below this line
select   min(id) keep (dense_rank first 
                       order by to_number(substr(id, instr(id, '_') + 1))) as id
from     inputs
group by substr(id, 1, instr(id, '_') - 1)
;

ID
-----
100_1
101_3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM