【问题标题】:Oracle: Assistance in breaking apart a complex date stringOracle:协助分解复杂的日期字符串
【发布时间】:2017-01-28 16:57:13
【问题描述】:

我从 csv 文件中读取了一个复杂的日期字符串。 Oracle 的 TO_DATE 函数无法处理该格式。寻找一种有效的方法来分解此字符串并返回一个日期对象,以插入到 DATE 列中。将 TO_DATE 与“DD-MON-YY HH.MI.SS AM”一起使用的建议选项不起作用。这种变化不会破坏这个特定的字符串。因此需要自定义功能。我也尝试过同样不起作用的“HH.MI.SS.SSSSS AM”格式。我发现如果我放弃小数秒,它会起作用。如果我运行正则表达式来删除该部分,它应该会按预期进行转换。

字符串格式为:21-OCT-04 01.03.23.966000 PM

我最初的想法是先按空格分解,产生三个子字符串。 然后将第一个子字符串用 - 打断,第二个用 . 打断,并将生成的片段直接加载到 DATE 对象中。

我可以使用更好的方法吗?

谢谢你,艾伦

【问题讨论】:

  • 所以您不需要保留时间戳的.96000 部分?如果是这样,请编辑您的 Q 以表明这一点。祝你好运。
  • 如何使用 regexp_replace 删除“.966000”部分,然后对其余部分应用转换?

标签: string oracle date


【解决方案1】:

使用您拥有的时间戳文字来创建时间戳,然后将其转换为“日期”:

select 
  cast(to_timestamp('21-OCT-04 01.03.23.966000 PM', 'dd-MON-rr hh.mi.ss.ff AM') as date) dt
from dual;

DT
----------------------
2004/10/21 01:03:23 PM

(输出格式取决于我的特定会话 NLS_DATE_FORMAT,我为这个插图实际上将其更改为 'yyyy/mm/dd hh:mi:ss AM'。)

【讨论】:

  • 谢谢,成功了。在 Oracle 中查找日期非常复杂且不直观。我非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2021-01-24
  • 2013-01-10
  • 2021-08-08
  • 2012-01-28
  • 2013-11-25
  • 1970-01-01
  • 2012-02-17
  • 1970-01-01
相关资源
最近更新 更多