我在Oracle
表中有以下数据:
.31244
abc
10-oct-2013
10-oct-13
60
我想编写一个查询以通过Regex
获取以下输出:
10-oct-2013
10-oct-13
请帮帮我。提前谢谢。
答案 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'
请尝试这个小提琴: