繁体   English   中英

使用pl sql提取子字符串

[英]extract substring using pl sql

我有一个包含以下数据的表T1

Sno  Ns_NAME       Mode    stat
1    AF_rtf_Nd_1   Manual  2
2    AF_rtf_Nd_2   Manual  3
3    AF_rtf_Nd_2i  Manual  2
4    AF_rtf_Nd_3   Auto    2
5    AF_rtf_Nd_3i  Auto    3

我需要在下面表演

检查它是否是手动的,从Ns_NAME取到最后的“ _”,并检查是否重复。 在这种情况下,有1个重复项。 获得这两行的平均状态[(2 + 3)/ 2],然后泵入另一个表T2。

输出:

T2

AF_rtf_Nd      Manual  2.5

我尝试使用substr函数并使用etract。 但这并没有获得正确的结果。

为了仅查看“手动”记录,请使用WHERE子句。 然后在子字符串上聚合。 您可以使用INSTRSUBSTRREGEX_REPLACE获得子字符串。 然后仅使用HAVING COUNT(*) > 1保留重复项。

insert into t2
select
  min(sno),
  regexp_replace(ns_name, '_[^_]*$', ''),
  'Manual',
  avg(stat)
from t1
where mode = 'Manual'
group by regexp_replace(ns_name, '_[^_]*$', '') 
having count(*) > 1;

与具有INSTRSUBSTRREGEXP_REPLACE等效为

substr(ns_name, 1, instr(ns_name, '_', -1) - 1)

(唯一的区别是字符串中根本没有“ _”。)

暂无
暂无

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

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