【发布时间】:2019-01-29 18:06:21
【问题描述】:
我有一个 varchar2 'Printed 4/21/2014 3:00:00 AM' 并且只想获得 '4/21/2014 3:00:00 AM' 作为日期。 我的想法是使用类似的东西:
我有:REGEXP_SUBSTR('Printed 4/21/2014 3:00:00 AM', '[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') 从双;
导致“无效月份”错误。
建议?
【问题讨论】:
-
嗯,这个问题有两个部分。首先,您需要删除任何额外的文本,这不是日期(日期时间)的字符串表示的一部分。这是通过调用
REGEXP_SUBSTR完成的,并且您的查询可以正确执行。但是,在代码中你做了一些你在问题描述中没有提到的事情:你想进一步将TO_DATE应用于结果。显然,您尝试的问题是生成的日期时间不是'YYYY-MM-DD HH24:MI:SS'格式,而是'MM/DD/YYYY HH:MI:SS AM'格式。 -
你提前知道日期(日期-时间)的格式吗?否则,这最后一部分(与第一部分无关)将无法解决。
-
啊,我明白了。我真的只需要日期,可以忽略时间。在这种情况下: SELECT to_date(REGEXP_SUBSTR('Printed 4/21/2014', '[0-9\/]*$'), 'MM/DD/YYYY') FROM DUAL;