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` 解决了这个问题。
3条答案
按热度按时间kadbb4591#
thigvfpy2#
对于这个简单的任务,字符串函数可能比正则表达式更有效。列中的字符数与删除下划线后的字符数之间的差异将为您提供所需的结果:
fkvaft9z3#
使用
regexp_count()
:这是一把小提琴