2012-03-12 110 views
1

该列被定义为VARCHAR。 此列中的数据:转换char-date-char

2012-03-11 12:10:00.0 IST

我想只有日期部分。
做什么是最好的方法?

我累了将其转换为日期:

to_char(to_date('2012-03-11 12:10:00.0 IST', 'YYYY-MM-DD'),'YYYY-MM-DD')

但得到了一个错误:日期格式图片两端将整个输入字符串之前

+4

为什么你在varchar列中有日期/时间数据?为什么你没有日期时间专栏? – 2012-03-12 11:53:46

+0

它结束了,你的varchar2列不会停在'DD'处,请参阅http://www.techonthenet.com/oracle/functions/to_date.php – Ben 2012-03-12 11:55:17

+1

@kenny - 你想要什么'DATE'?由于Oracle'DATE'既没有时区也没有小数秒,所以当您将数据转换为'DATE'时,您是否要忽略这两者?或者您是否想将时间转换为标准时区(即GMT/UTC)?你确定你不想将字符串转换为支持小数秒和时区的'TIMESTAMP WITH TIME ZONE'吗? – 2012-03-12 12:03:47

回答

5

更新:如果我得到你的权利,你只想要日期部分不转换它迄今为止? 那么做到这一点:

select SUBSTR('2012-03-11 12:10:00.0 IST', 1, 10) 

如果你也想将其转换为日期,那么这样做:

select to_date(SUBSTR('2012-03-11 12:10:00.0 IST', 1, 10)) 
+0

-1,OP有正确的想法,先转换为日期。你有效地使用char工具进行日期转换。 – Ben 2012-03-12 11:57:39

+2

+1在原始字符串中给定一个常量的日期时间格式,这是将它从一个字符串**转换为最简单的方法。 – 2012-03-12 12:03:00

+1

@ MarkBannister,它也是最有可能失败默默和最有可能给你错误的结果。是的,如果它是_constant日期时间format_,那么它会工作,但它存储为一个varchar,我不相信潜在的陷阱是值得的,约20个字符的代码和一个微秒或两个。 – Ben 2012-03-12 12:17:16

1

于尔根·d是好的,可能是最快的。但是你也可以这样做:
select cast(to_timestamp('2012-03-11 12:10:00.0 IST', 'YYYY-MM-DD HH24:MI:SS.FF1 "IST"') as date) from dual;