如何在oracle中从空间中提取单词?

如何在oracle中从空间中提取单词?,oracle,oracle12c,Oracle,Oracle12c,我在列文件名中有一句话,例如: filename Exact filename from California Dec 2015 Exact filename from Austin Jan 2015 我只想从中提取日期部分,就像我的预期输出是: filename Dec 2015 Jan 2015 然而,我在Stackoverflow中搜索了两个结果,但它们对我不起作用 select regexp_substr(regexp_replace(filename

我在列文件名中有一句话,例如:

filename
Exact filename from California Dec 2015
Exact filename from Austin Jan 2015
我只想从中提取日期部分,就像我的预期输出是:

filename
Dec 2015
Jan 2015
然而,我在Stackoverflow中搜索了两个结果,但它们对我不起作用

select regexp_substr(regexp_replace(filename
                                   ,'[[:space:]]-[[:space:]]'
                                   ,chr(11))
                    ,'([^'||chr(11)||']*)('||chr(11)||'|$)'
                    ,1 -- Start here
                    ,4 -- return 1st, 2nd, 3rd, etc. match
                    ,null
                    ,1 -- return 1st sub exp
                    )
我尝试过的另一种方法是:

regexp_like(filename,'(^[:space:]|[:space:]$)');

但是,这两种解决方案对我都不起作用。我在上面搜索了更多内容,但没有找到它。

如果您只需要列值中的最后两个“单词”,您可以使用:

select regexp_substr(filename, '[^[:space:]]+[[:space:]][^[:space:]]+$') from table;
此表达式匹配:(除空格外的任何内容)(空格)(除空格外的任何内容)(结束)


请注意,这只允许最后两个单词之间有一个空格字符。

您能帮我修改您的答案吗?确切的文件名来自加利福尼亚2015年12月(1).txt?如果我有filename@DikshitKarki然后,我们需要采用不同的方法。是否保证总是有一个3字符的月份后跟4位数的年份?我们可以用它来代替文字。有些月份的日期是6个字符。所以,我试图理解你解决问题的方法。请澄清我哪里做错了。首先(除空格外的任何内容):它将精确到。(空格)(除空格外的任何内容)。它将转到文件名(结束)。我不明白(除了空间之外的任何东西)(空间)(除了空间之外的任何东西)(结束)是如何工作的?请你解释一下,这样我就可以自己解决了。你从一开始就在看这篇文章,这是不正确的。第一个
(带空格的任何内容)
匹配
Jan
(或
Dec
),而不是
精确的
。CCC_East Emplozer Censxs报告2016年5月(1)。TXT20068您的代码适用于除此之外的所有类型的文件。请帮我从本专栏中摘录2016年5月。谢谢。