【问题标题】:Informatica File date string convert into timestampInformatica 文件日期字符串转换为时间戳
【发布时间】:2020-06-04 17:01:49
【问题描述】:

我在文件 Delivery_date - '02/09/2020 15:30:00 PM' 中有一个字符串格式的列。它可以是上午或下午。 我需要在 informatica power center 中将其转换为 oracle 的 TIMESTAMP 格式。

我已经尝试过如下 - TO_DATE(Delivery_date,'MM-DD-YYYY HH24:MI:SS')

但它不适用于 AM 和 PM。请推荐

【问题讨论】:

  • 你为什么要在 MM-DD-YYYY HH24:MI:SS 而不是 YYYY-MM-DD HH24:MI:SS 。执行SELECT TO_TIMESTAMP(sysdate) FROM dual; 返回YYYY-MM-DD HH24:MI:SS 格式
  • 但无论哪种方式都可以。只要你指定它就是日期
  • @OmariVictorOmosa 您的用户可以在他们自己的会话中设置他们想要的任何格式(即ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'DD-RR-MM AM SS:HH:MI'),因此您不应该依赖默认格式,并且应该始终在@OmariVictorOmosa 的第二个参数中提供格式模型987654328@ 和TO_DATEdb<>fiddle:在第一个例子中,时间是错误的,在第二个例子中,世纪和时间都是错误的,第三个例子甚至没有运行(所有这些都没有改变 SQL 语句)。
  • 让你@MT0。我已经测试过了。
  • @OmariVictorOmosa 我的意思不是说它不适用于您的计算机上的数据库设置;它可能不会以相同的方式对所有用户起作用(请参阅default date format),因此如果您的查询由不同地区的某人运行,那么如果您假设默认格式,相同的 SQL 语句将给出不同的结果(或中断)不保证在用户会话之间保持一致的模型。如果您希望查询对每个人都同样有效,请传递一个明确的格式模型。

标签: sql oracle file informatica informatica-powercenter


【解决方案1】:

您是否尝试过简单地覆盖完整格式?:

TO_DATE( Delivery_date, 'MM/DD/YYYY HH12:MI:SS AM' )

这应该可以正常工作。更多格式相关问题请参考documentation

【讨论】:

    【解决方案2】:

    您可以在映射转换中使用 reg_replace 删除 AM 或 PM,如果列是日期/时间格式,则添加 TO_DATE

    REG_REPLACE('02/09/2020 15:30:00 PM', '( AM| PM)', '')
    

    由于数据以字符串形式输入并以时间形式输出,因此我相信您的输出 epression 将在日期/时间中

    那你就可以加to_date上班了。

    TO_DATE(REG_REPLACE('02/09/2020 15:30:00 PM', '( AM| PM)', ''), 'MM-DD-YYYY HH24:MI:SS')
    

    如果你想强制格式——另一种方式

    TO_DATE(TO_CHAR(TO_DATE(REG_REPLACE('02/09/2020 15:30:00 PM', '( AM| PM)', '')), 'MM-DD-YYYY HH24:MI:SS'))
    
     #EXPLANATION
     /*REMOVE THE AM/PM: REG_REPLACE('02/09/2020 15:30:00 PM', '( AM| PM)', '')*/
     /*CONVERT IT TO DATE: TO_DATE(REG_REPLACE('02/09/2020 15:30:00 PM', '( AM| PM)', ''))*/
     /*CHANGE THE FORMAT: TO_CHAR(TO_DATE(REG_REPLACE('02/09/2020 15:30:00 PM', '( AM| PM)', '')), 'MM-DD-YYYY HH24:MI:SS')*/
     /*THEN RETURN TO DATE: TO_CHAR(TO_DATE(REG_REPLACE('02/09/2020 15:30:00 PM', '( AM| PM)', '')), 'MM-DD-YYYY HH24:MI:SS')*/
    

    【讨论】:

      【解决方案3】:

      如果您想要TIMESTAMP 数据类型,请使用TO_TIMESTAMP。 Oracle 不允许同时使用 HH24AM(或 PM)格式模型,因为如果 24 小时制和子午线指示符不匹配,则会产生歧义;您将不得不删除其中一个,因为AM/PM 指示符位于字符串的末尾,那么使用SUBSTR 最容易删除:

      TO_TIMESTAMP( SUBSTR( delivery_date, 1, 19 ), 'MM/DD/YYYY HH24:MI:SS' )
      

      db<>fiddle

      (如果您只想要 DATE 数据类型,它在 Oracle 中也有时间组件,那么使用 TO_DATE 而不是 TO_TIMESTAMP

      【讨论】:

      • TO_TIMESTAMP() 在 informatica 工具中不起作用。除非TO_DATE(SUBSTR( '02/09/2020 15:30:00 PM', 1, 19 ))
      猜你喜欢
      • 1970-01-01
      • 2011-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-16
      • 2016-09-15
      • 1970-01-01
      相关资源
      最近更新 更多