在Oracle中将mm / dd / yyyy转换为yyyy-mm-dd

时间:2013-08-07 12:15:53

标签: sql oracle datetime

我的日期列位于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 个答案:

答案 0 :(得分:8)

您应该 从不 VARCHAR列中存储日期

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

如果您确定所有“日期”确实具有正确(和相同)格式,则以下内容应该有效:

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

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

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

顺便说一下:DATE这个专栏的名字太可怕了。这是一个保留字,它根本不会告诉你关于该列实际存储的内容(“开始日期”,“结束日期”,“出生日期”,“截止日期”,......) )

答案 1 :(得分:2)

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

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

Sql Fiddle Demo

答案 2 :(得分:0)

select to_char(TO_DATE("Date", 'MM/DD/YYYY'),'yyyy-mm-dd')
from Table1

<强> SQL FIDDLE

答案 3 :(得分:0)

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