如何使用周围的字符从Oracle varchar获取日期时间

时间:2019-01-29 18:06:21

标签: regex oracle

我有一个varchar2'Printed 4/21/2014 3:00:00 AM',并且只想获取'4/21/2014 3:00:00 AM'作为日期。 我的想法是使用类似的东西:

我有:REGEXP_SUBSTR('2014年4月21日打印3:00:00','[0-9 /:APM] * $') 结果在:2014/4/21 3:00:00

但是,

选择   to_date(REGEXP_SUBSTR('2014年4月21日打印3:00:00','[0-9 /:APM] * $'),'YYYY-MM-DD HH24:MI:SS')   从双重;

导致“无效月份”错误。

建议?

2 个答案:

答案 0 :(得分:1)

问题: 由mathguy正确识别-日期格式

我认为我真的不需要时间戳,因此:

选择   to_date(REGEXP_SUBSTR('打印4/21/2014','[0-9 /] * $'),'MM / DD / YYYY')   从双重;

工作正常。

答案 1 :(得分:0)

如果格式是固定的-包括您要忽略的文本-那么您可以将整个字符串转换为日期或时间戳,而无需使用正则表达式或子字符串:

select to_date('Printed 4/21/2014 3:00:00 AM', '"Printed" MM/DD/YYYY HH:MI:SS AM') as result
from dual;

RESULT             
-------------------
2014-04-21 03:00:00

通过在格式模型内用双引号将该部分括起来,将固定的“印刷”部分视为a character literal

如果您真的对时间不感兴趣,则可以在以后删除它:

select trunc(to_date('Printed 4/21/2014 3:00:00 AM', '"Printed" MM/DD/YYYY HH:MI:SS AM')) as result
from dual;

RESULT             
-------------------
2014-04-21 00:00:00