2

我拥有的日期列在varchar2其中,我想将这些值转换为YYYY-MM-DD

DATE
7/26/2013
7/29/2013
8/1/2013 
8/4/2013 
7/28/2013
7/31/2013
8/3/2013 
7/30/2013
8/5/2013 
7/25/2013
8/2/2013 
8/6/2013 
7/27/2013
4

4 回答 4

8

永远不应该将日期存储在VARCHAR列中

所以为了现在以不同的方式显示它,您需要先将字符串转换为日期,然后再转换回字符串

如果您确定所有“日期”确实具有正确(且相同)的格式,那么以下应该有效:

select to_char(to_date(date, 'mm/dd/yyyy'), 'yyyy-mm-dd')
from the_table;

但是,如果这给您一个错误,我不会感到惊讶,因为一行或多行的日期格式不同。如果您从一开始就将列定义为类型,则不可能发生的事情DATE

您真的应该考虑将该列更改为真正的DATE列。

顺便说一句:DATE对于这样一个专栏来说,这是一个可怕的名字。它是一个保留字,它根本不会告诉您该列中实际存储的内容(“开始日期”、“结束日期”、“出生日期”、“到期日”...... )

于 2013-08-07T12:20:40.850 回答
2

您必须将字符串date转换为char预期格式,然后再转换为

select TO_CHAR(TO_DATE(datecol, 'MM/DD/YYYY'),'YYYY-MM-DD')
from your_table

Sql 小提琴演示

于 2013-08-07T12:20:45.290 回答
0
select to_char(TO_DATE("Date", 'MM/DD/YYYY'),'yyyy-mm-dd')
from Table1

SQL 小提琴

于 2013-08-07T12:21:33.423 回答
0

您可以使用 REGEXP_REPLACE 函数来操作字符串或 to_date 和 to_char 将字符串转换为日期,而不是使用不同格式的字符串。

于 2013-08-07T12:21:53.527 回答