如何将字符串插入现有字符串?

时间:2016-02-12 12:11:37

标签: sql oracle

我表格中的数据如下所示:

       COL1 
row 1  aa aa a.bb bb bb.
row 2  aa a   aa  aa  a  a. bb bb bbb bb.
row 3  aa a   aaa   aa  aa  a  a. bbbbb bb  bb bbb bb.
row N  aa a   aaa  aaa a  a aa  aa  a  a. bbbbb bb  bb bb bb bbb bb.

如何在现有列字符串值的第一个句号/句点之前添加固定字符串值?我需要结果看起来像这样:

       COL1
row 1  aa aa a(substring).bb bb bb.
row 2  aa a   aa  aa  a  a(substring). bb bb bbb bb.
row 3  aa a   aaa   aa  aa  a  a(substring). bbbbb bb  bb bbb bb.
row N  aa a   aaa  aaa a  a aa  aa  a  a(substring). bbbbb bb  bb bb bb bbb bb.

2 个答案:

答案 0 :(得分:1)

您可以使用显式字符串操作来执行此操作:

select substr(col, 1, n) || string || substr(col, n+1)

作为旁注:此功能在其他数据库中可用:

  • stuff()(在SQL Server中)
  • insert()(MySQL)

答案 1 :(得分:0)

您可以使用the regexp_replace() function的正则表达式:

select regexp_replace('aa a   aaa   aa  aa  a  a. bbbbb bb  bb bbb bb.',
  '\.', '(substring).', 1, 1)
from dual;

REGEXP_REPLACE('AAAAAAAAAAAA.BBBBBBBBBBBBBB.','\.','(SUBST
----------------------------------------------------------
aa a   aaa   aa  aa  a  a(substring). bbbbb bb  bb bbb bb.

e.g:

a.

或者,如果您只想匹配a,请在模式和替换字符串中加入regexp_replace(col1, 'a\.', 'a(substring).', 1, 1)

with t (id, col1) as (
  select 1, 'aa aa a.bb bb bb.' from dual
  union all select 2, 'aa a   aa  aa  a  a. bb bb bbb bb.' from dual
  union all select 3, 'aa a   aaa   aa  aa  a  a. bbbbb bb  bb bbb bb.' from dual
  union all select 4, 'aa a   aaa  aaa a  a aa  aa  a  a. bbbbb bb  bb bb bb bbb bb.' from dual
)
select id, regexp_replace(col1, 'a\.', 'a(substring).', 1, 1) as col1
from t;

ID COL1                                                                   
-- ------------------------------------------------------------------------
 1 aa aa a(substring).bb bb bb.                                            
 2 aa a   aa  aa  a  a(substring). bb bb bbb bb.                           
 3 aa a   aaa   aa  aa  a  a(substring). bbbbb bb  bb bbb bb.              
 4 aa a   aaa  aaa a  a aa  aa  a  a(substring). bbbbb bb  bb bb bb bbb bb.

通过CTE获取所有样本数据:

a.

如果要修改{{1}}的所有外观,请调整或删除事件和位置参数。

如果您需要,可以使用相同的内容作为更新的一部分。