我有一个长文本的列,我需要在其中找到一个特定的字符串。
例如: 该栏目包含:“Hello mi number is C.C. 2313”
我需要提取“C.C.2313”
我正在使用Oracle 11g数据库。
答案 0 :(得分:1)
Oracle中的变量分隔符很棘手。这是一种方法:
select substr(col, length(regexp_substr(col, '.*(cc|[cC][.][cC][.]')) + 1)
哦,上面删除了分隔符。你想要它,这样更容易:
select regexp_substr(col, 'cc|[cC][.][cC][.].*')
答案 1 :(得分:0)
这应该有帮助
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.连续铸造
的情况