获取Oracle 11g中的列的替换

时间:2017-07-06 13:32:30

标签: sql oracle11g

我有一个长文本的列,我需要在其中找到一个特定的字符串。

例如: 该栏目包含:“Hello mi number is C.C. 2313”

我需要提取“C.C.2313”

我正在使用Oracle 11g数据库。

3 个答案:

答案 0 :(得分:1)

Oracle中的变量分隔符很棘手。这是一种方法:

select substr(col, length(regexp_substr(col, '.*(cc|[cC][.][cC][.]')) + 1)

哦,上面删除了分隔符。你想要它,这样更容易:

select regexp_substr(col, 'cc|[cC][.][cC][.].*')

答案 1 :(得分:0)

这应该有帮助

  1. 以下是如何使其发挥作用的示例。
  2. 我的建议是,在表格上设置一个触发器,将字符串的一部分作为单独的列插入表格中
  3. WITH data AS (SELECT 'Hello mi number is C.C. 2313' column_Value FROM dual UNION SELECT 'Hello mi number is c.c. 2414' column_Value FROM dual UNION SELECT 'Hello mi number is cc 2515' column_Value FROM dual ) SELECT 1, SUBSTR(column_value, instr(column_value,'cc') + 2) FROM data WHERE column_value LIKE '%cc%' UNION SELECT 2, SUBSTR(column_value, instr(column_value,'c.c.',1) + 4) FROM data WHERE column_value LIKE '%c.c.%' UNION SELECT 3, SUBSTR(column_value, instr(column_value, 'C.C.') + 4) FROM data WHERE column_value LIKE '%C.C.%' ;

答案 2 :(得分:0)

如果列的长度可变,我会给出答案(如果它是固定的,它会更容易):

create table t10(
test varchar2 (30));

insert into t10 (test) values ('Hello mi number is C.C. 2313');

select  substr(test,instr(test, 'C.C.'),length(test))  from t10 ar;

您还可以划分C.C.的所有变化。 cc C.c.连续铸造

的情况