要更改的日期格式

时间:2016-05-06 07:24:41

标签: oracle oracle11g oracle10g sql-loader

我需要帮助才能将日期格式从(05 May 2016 12:00 AM)更改为(YYYY-MM-DD HH:MM:SS)格式。

你可以帮我解决这个问题吗?

非常感谢你的帮助。

我试过以下格式

SELECT TO_CHAR(TO_DATE('2 Apr 2015 12:00 AM', 'DD-MON-YYYY '), 'YYYY-MM-DD')
FROM dual;

感谢帮助MTO。但我在sqlldr中使用相同的格式,然后得到以下错误。

  

ora-01821日期格式无法识别

 LAST_UPDATE DATE 'TO_CHAR(TO_DATE(:LAST_UPDATE, 'DD MON YYYY HH12:MI AM'),'YYYY-MM-DD HH24:MI:SS')',

2 个答案:

答案 0 :(得分:2)

使用完整格式掩码:

SELECT TO_CHAR(
         TO_DATE( '2 Apr 2015 12:00 AM', 'DD MON YYYY HH12:MI AM'),
         'YYYY-MM-DD HH24:MI:SS'
       )
FROM dual;

答案 1 :(得分:1)

如果您在SQL * Loader中执行此操作并填充DATE列,则需要将初始字符串转换为日期,而不是将其转换为另一种格式的其他字符串。

如果您使用SQL operator functionality,那么您只需要内部to_date()部分,而不是外部to_char(),并注意运算符用双引号括起来而不是单引号:< / p>

LAST_UPDATE "TO_DATE(:LAST_UPDATE, 'DD MON YYYY HH12:MI AM')",

datetimes and intervals的处理方式更简单,您可以尝试使用DATE关键字;但是你提供SQL运算符而不仅仅是格式掩码。你可以这样做:

LAST_UPDATE DATE 'DD MON YYYY HH12:MI AM'.

这假设SQL * Loader在英语NLS_LANG环境中运行,因为它依赖于NLS_DATE_LANGUAGE设置来处理MON元素。如果不是这种情况,那么可以使用SQL运算符方法,使用to_date()的可选第三个参数来指定它期望字符串是英语。

考虑到Oracle以特定格式存储日期,您的问题似乎有些困惑。它不是;它使用您通常不需要了解的内部表示,并且由您的客户端以可读格式显示该内部值,即使用显式或隐式转换。您似乎假设日期被“存储”为YYYY-MM-DD HH24:MI:SS,但这就是您的客户端向您显示数据的方式。