在oracle中将DD-MMM-YYYY更改为YYYYMMDD

时间:2017-11-15 19:17:33

标签: oracle formatting to-date to-char

我有一个日期07-OCT-2017,我必须在oracle中将其转换为20171007。

Below code doesn't work for me
select To_date(to_char('07-OCT-2017','DD-MMM-YYYY'), 'yyyymmdd') from dual;

2 个答案:

答案 0 :(得分:1)

你的硬币太多糖了。

  select to_char( to_date( '07-JUL-2017',
                           'DD-MON-YYYY',
                           'NLS_DATE_LANGUAGE = American'),
                 'YYYYMMDD') from dual;

产量

TO_CHAR(
--------
20170707

修复细节。请编辑您的问题以匹配您提供的数据。 不过,希望这会有所帮助。

答案 1 :(得分:0)

  

我有一个日期07-OCT-2017,我必须在oracle中将其转换为20171007。

日期(存储在表格中)由7 bytes表示 - 它们没有与之关联的任何格式。如果它们被格式化为字符串,那么这是您用来访问数据库的客户端程序,它将自己的格式应用于日期(通常可以通过该程序中的首选项设置)。

因此,您可以使用日期文字来获取日期:

SELECT DATE '2017-10-07' FROM DUAL;

或使用TO_DATE

SELECT TO_DATE( '07-OCT'2017', 'DD-MON-YYYY', 'NLS_DATE_LANGUAGE=English' )
FROM   DUAL;

但是,您正在使用的客户端程序会将这些7字节转换为您,用户可以使用其默认日期格式来理解的内容。您可以在以下位置更改此默认格式:

如果您不想更改默认值或需要以其他用户的格式显示默认值,则需要使用TO_CHAR将日期(内部7字节,无格式)转换为格式化字符串:

SELECT TO_CHAR( DATE '2017-10-07', 'YYYYMMDD' ) FROM DUAL;

SELECT TO_CHAR(
         TO_DATE( '07-OCT'2017', 'DD-MON-YYYY', 'NLS_DATE_LANGUAGE=English' ),
         'YYYYMMDD'
       )
FROM   DUAL;