使用pl sql提取子字符串

时间:2015-10-12 06:40:25

标签: sql plsql

我有一张带有以下数据的表格

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。但它没有取得正确的结果。

1 个答案:

答案 0 :(得分:0)

为了查看手册'仅记录,使用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;

REGEXP_REPLACE与[{1}}和INSTR相当于

SUBSTR

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