Oracle SQL |如何将文本字段更改为具有特定格式的日期字段?

时间:2015-07-20 14:28:34

标签: sql oracle date

说我有以下行

DATE
2016-04
2015-11
2009-08

我希望它们看起来像这样,日期总是设置为月份的第一天

DATE
01-APR-2016
01-NOV-2015
01-AUG-2009

4 个答案:

答案 0 :(得分:3)

您需要先转换您的"月份日期"使用to_date()

进入实际日期
to_date(the_column||'-01', 'yyyy-mm-dd')

请注意,您需要添加一天(||'-01')才能获得to_date()功能的有效输入。

然后您可以根据需要使用to_char()

格式化生成的日期
select to_char(to_date(the_column||'-01', 'yyyy-mm-dd'), 'dd-mon-yyyy')
from the_table;

答案 1 :(得分:2)

回答您的直接问题:

  drop table junk;

  create table junk ( notadate  varchar2(7) );

  insert into junk values ( '2016-04' );
  insert into junk values ( '2015-11' );
  insert into junk values ( '2009-08' );

  commit;

  alter session set nls_date_format='dd-mon-yyyy';

  select to_date(notadate,'yyyy-mm') from junk;

  TO_DATE(NOT
  -----------
  01-apr-2016
  01-nov-2015
  01-aug-2009

但是,我可能建议您执行以下操作:

  alter table junk add ( mydate  date );

  update junk
     set mydate = to_date(notadate,'yyyy-mm')
  /

  alter table junk drop ( notadate );

并使用新的DATE列..正确...

  select * from junk;

  MYDATE
  -----------
  01-apr-2016
  01-nov-2015
  01-aug-2009


  select to_char(mydate, 'yyyy-mm') from junk;
  (if needed)

  TO_CHAR
  -------
  2016-04
  2015-11
  2009-08

答案 2 :(得分:1)

首先,除了文本的月份和年份之外还附加日期。

然后使用to_date()

然后使用日期格式: ALTER SESSION SET nls_date_format='dd-mm-yyyy';

答案 3 :(得分:1)

使用to_char功能

SELECT to_char("DATE", 'DD-FMMon-YYYY') AS "DATE"
FROM yourtable;

输出

DATE
01-Apr-2016
01-Nov-2015
01-Aug-2009

SQL小提琴:http://sqlfiddle.com/#!4/8ea1df/16/0