2012-10-29 45 views
1
select to_date(to_number(to_char(created_on_date,'MMDDYYYY')),'MMDDYYYY') from is_mdm_customer 

以上查询是给如何日期列转换为MMDDYYYY格式比较MMDDYYYY格式的其他表中的列

Error starting at line 1 in command: 
select to_date(to_number(to_char(created_on_date,'MMDDYYYY')),'MMDDYYYY') from is_mdm_customer 
Error report: 
SQL Error: ORA-01843: not a valid month 
01843. 00000 - "not a valid month" 
*Cause:  
*Action: 
+1

什么样的数据类型是你的“日期”?你并没有像VARCHAR那样保持他们!? – MatBailie

+0

什么哦你想用'to_xxx'函数嵌套做什么? –

回答

2

,可以储存日期类型为DATE列,而不是VARCHAR处理。如果您需要月份,日期和年份,则也可以为这些列添加列。

只是比较日期。如果您不想比较小时,分钟和秒数,我会以这种方式存储它们:在INSERT或UPDATE它的那天将时间设置为午夜。然后您可以直接比较日期。

格式应该只影响视图渲染,仅此而已。

+0

他们必须是DATE,或将没有意义,首先做一个TO_CHAR,不是吗?我想他想不分秒等 –

+0

感谢duffymo ....建议的工作与日期工作! – user1782212

0

你可以使用这个如果列created_on_date被定义为日期列。

从is_mdm_customer中选择to_char(created_on_date,'MMDDYYYY');

1

如果你只是想剪掉时间部分使用TRUNCATE()。

select TRUNC(created_on_date) from is_mdm_customer 

您也可以传递一个参数给TRUNCATE函数以不同的方式截断日期。但是,如果你只想要YEAR,EXTRACT()通常会更好。

Ref:Oracle 11g Trunc(Date)