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

Sql 如何从oracle中的字符串中提取dd mon yyyy格式的日期,sql,oracle,Sql,Oracle,我在Oracle的表中有以下数据: .31244 abc 10-oct-2013 10-oct-13 60 我想编写一个查询,通过Regex获得以下输出: 10-oct-2013 10-oct-13 请帮帮我。提前感谢。简单尝试: with w(item) as ( select '.31244' from dual union all select 'abc' from dual union all select '10-oct-2013' from dual un

我在Oracle的
表中有以下数据:

.31244
abc
10-oct-2013
10-oct-13
60
我想编写一个查询,通过
Regex
获得以下输出:

10-oct-2013
10-oct-13
请帮帮我。提前感谢。

简单尝试:

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

您可以尝试以下表达式:

'[[:digit:]]{2}-[[:alpha:]]{3}-[[:digit:]]{2}','i'
请试试这把小提琴:


你试过什么吗?或者你只需要一些免费的代码?谢谢SVK,我已经尝试了这个查询:-选择*从测试中REGEXP_喜欢的地方(mystring,[0-30]-[a-z][a-z]-[:digit:]),所以把它添加到你的问题中,始终将所有信息放在那里确保SVK如果你对此有任何想法,请帮助我。顺便问一句,你意识到你的正则表达式必须为闰年做好准备吗?这相当困难。也许更好的解决方案是在某些存储过程中使用to_date,例如首先使用
'dd-mon-yyyy'
,以防出现异常情况
dd-mon-yy