如何在oracle中提取字符串的特定部分?

时间:2014-07-22 10:12:06

标签: regex oracle oracle11g oracle10g oracle-sqldeveloper

我有一些列名为" text_note"的记录。现在我需要找出哪个text_note包含像%CTOE0%这样的字符串。

我认为可以使用正则表达式来完成,但因为我并不那么熟悉 使用正则表达式,我无法为其创建正则表达式。

请帮助。
饶恕 我想要一个不同的COULMN的代码(CTOE)

我的问题是,我只是不想表现出“CTOE'在下一栏。我想知道使用了什么代码。可以使用的代码类型是CTOE01,CTOE02,CTOE03和SO ON。现在我想知道使用了哪些代码。

示例如下:如果文本不包含" dsghdsCTOE01dbhf"那么新专栏应该包含" CTOE01"如果文本不包含" dsCTOE02dbhf"那么新专栏应该包含" CTOE02" -

3 个答案:

答案 0 :(得分:2)

我会使用regexp_substr

CREATE TABLE t (text_note VARCHAR2(30));
INSERT INTO t VALUES ('dsghdsCTOE01dbhf');
INSERT INTO t VALUES ('dsCTOE02dbhf');
INSERT INTO t VALUES ('soemthingelse');

SELECT text_note, 
       regexp_substr(text_note, 'CTOE[0-9]+') AS code 
  FROM t
 WHERE   regexp_like(text_note, 'CTOE[0-9]+');


text_note         code
----------------  ----
dsghdsCTOE01dbhf  CTOE01
dsCTOE02dbhf      CTOE02

regexp_substr提取新列,regexp_like过滤包含CTOE...的行。

答案 1 :(得分:0)

如果您的意思是该字段以%开头和结尾,并且只包含大写字母和数字:

SELECT * FROM yourtable
WHERE REGEXP_LIKE(text_note, '^%[A-Z0-9]+%$', 'c');

答案 2 :(得分:0)

修改

SELECT text_note, 
substr(text_note, (instr(text_note, 'CTOE0')), 6)   AS CODE
FROM table where text_note like '%CTOE0%';

在上面的查询中,我假设你的代码长度只有6个字符,并使用substr函数来捕获6个字符的代码。上面的查询得到了所需的ouptut。


原始答案:

看看这对你有帮助!

Select text_note, 'CTOE' CODE from table
where text_note like '%\%CTOE0\%%;

我认为%也是搜索字符串的一部分,并试图按照给定的here

来逃避百分比