我在列文件名中有一个句子,例如:
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:]$)');
但是,这两种解决方案都不适用于我。我在SO上进行了更多搜索,但没有得到。
如果你只需要列值中的最后两个“单词”,则可以使用以下命令:
select regexp_substr(filename, '[^[:space:]]+[[:space:]][^[:space:]]+$') from table;
此表达式匹配:(space以外的任何内容)(space)(space以外的任何内容)(end)
请注意,尽管如此,最后两个单词之间仅允许一个空格字符。
您能帮我修改您在加利福尼亚州2015年12月(1).txt中提供的确切文件名吗?如果我有这样的文件名
@DikshitKarki然后,我们将需要采用其他方法。是否保证始终有一个3个字符的月份,然后是4位数的年份?我们可以寻找它而不是文字。
某个月的日期变化是6个字符。所以,我试图了解您解决的方式。请向我说明我在哪里做错。起初(除空格以外的所有内容):它将变为精确。(空格)(空格以外的任何东西)。它将上升到filename(end)。我不明白(空格以外的任何东西)(space)(空格以外的任何东西)(end)是如何工作的?请你解释一下,以便我自己解决
您从一开始就在看文本,这是不正确的。前两个
(anything with space)
匹配项Jan
(或Dec
),不是Exact
。CCC_East Emplozer Censxs报告,2016年5月(1).txt201608您的代码适用于除此文件之外的所有类型的文件。请帮助我从本专栏中摘录2016年5月。谢谢。