如何从oracle中的字符串中提取dd-mon-yyyy格式的日期

时间:2014-05-07 12:46:41

标签: sql oracle

我在Oracle表中有以下数据:

.31244
abc
10-oct-2013
10-oct-13
60

我想编写一个查询以通过Regex获取以下输出:

10-oct-2013
10-oct-13

请帮帮我。提前谢谢。

2 个答案:

答案 0 :(得分:1)

简单尝试:

with w(item) as
(
  select '.31244' from dual
  union all
  select 'abc' from dual
  union all
  select '10-oct-2013' from dual
  union all
  select '10-oct-13' from dual
  union all
  select '60' from dual
)
select item, case when regexp_substr(item, '\d{2}-[a-zA-Z]{3}-\d{4}') is not null then to_date(item, 'dd-mon-yyyy')
                  when regexp_substr(item, '\d{2}-[a-zA-Z]{3}-\d{2}') is not null then to_date(item, 'dd-mon-yy')
                  end conv_date
from w
;

这给出了:

ITEM        CONV_DATE
.31244      null
abc         null
10-oct-2013 10-oct.-2013
10-oct-13   10-oct.-2013
60          null

答案 1 :(得分:1)

你可以尝试这个表达式:

'[[:digit:]]{2}-[[:alpha:]]{3}-[[:digit:]]{2}','i'

请尝试这个小提琴:

http://sqlfiddle.com/#!4/9dd8c/5