oracle:如何在列中找到最大下划线?

i7uq4tfw  于 2021-07-26  发布在  Java
关注(0)|答案(3)|浏览(458)

我需要知道此列中的数据的最大下划线。
例如,

Column A:
1_2_10_148880_148881, 
1_11_15_3,
1_11_15_5_521_2

结果是5最后一个数据在a列中有最大下划线。
oracle要查找结果的查询是什么?有什么想法吗?

kadbb459

kadbb4591#

with
  t (a) as (
    select '1_2_10_148880_148881' from dual union all
    select '1_11_15_3'            from dual union all
    select '1_11_15_5_521_2'      from dual
  )
select nvl(max(length(translate(a, '_' || a, '_'))), 0) as max_underscore
from   t
;

MAX_UNDERSCORE
--------------
             5
``` `translate` 将用下划线替换每个下划线,并将输入字符串中的每个其他字符替换为“nothing”(因此只需删除它)。那么,剩下什么 `translate` 只是每个字符串的下划线。
然后取结果字符串的长度(与原始字符串中下划线的数目相同),然后取 `max` ,和 `nvl` 最后是字符串中没有下划线的情况。在这种情况下, `translate` 会回来的 `null` 唉,还有 `null` 是 `null` ,不是0。 `nvl` 解决了这个问题。
thigvfpy

thigvfpy2#

对于这个简单的任务,字符串函数可能比正则表达式更有效。列中的字符数与删除下划线后的字符数之间的差异将为您提供所需的结果:

select max(length(columna) - length(replace(columna, '_', ''))) max_no_underscore
from mytable
fkvaft9z

fkvaft9z3#

使用 regexp_count() :

select max(regexp_count(a, '_'))
from t;

这是一把小提琴

相关问题