2013-01-03 96 views
0

我试图通过从源列表中选择一个值为date数据类型的值来插入date数据类型的值。我已经直接选择列没有做使用to_date功能任何转换,因为两者都是同一类型的,但我发现了以下错误:Oracle数据类型错误

SQL Error: ORA-00932: inconsistent datatypes: expected DATE got NUMBER 
00932. 00000 - "inconsistent datatypes: expected %s got %s" 

我翻了一番检查源列没有空值。

insert into Target(Targetdate) 
    select to_date(Source.START_DATE,'yyyy-mm-dd') 
    from Source 

感谢您关注此事。

回答

2

我假设你试着将日期截断到当天的目标表中。这可以通过这样做来完成:

insert into Target(Targetdate) select trunc(Source.START_DATE,'DD') from Source 

编辑

Dazzal提到,因为这是留出的第二个参数TRUNC时默认操作,所以这甚至有点简单:

insert into Target(Targetdate) select trunc(Source.START_DATE) from Source 

与您的查询的问题是,Source.START_DATE是一个日期,而不是字符串...

EDIT2

,因为它似乎要获取日期字符串以特定的格式 - 这有没有做的日期类型,以及如何thigs在内部存储 - 只是这样做:

SELECT to_char(START_DATE,'YYYY-MM-DD' from Source; 
+0

由于dd是日期输入的默认值,因此可以省略要截断的第二个参数。 – DazzaL

+0

@Dazzal谢谢,虽然我总是把它留在 - 因为我倾向于忘记功能的默认行为:) – ppeterka

+1

trunc没有解决我的问题。更具体地说,我的源表的示例值是11-JUN-13,我需要目标值为YYYY-MM-DD,我该如何实现? – user1751356

1

你说你是选择从源表中的日期列。当它是日期栏时,那么为什么你再次转换成日期?当然,这会给错误也.. 'TO_DATE' 功能的

insert into Target(Targetdate) 
select to_date(Source.START_DATE,'yyyy-mm-dd'), from Source 

输入参数 '弦'

to_date(string1, [ format_mask ], [ nls_language ]) 

UPDATE1:

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


insert into Target(Targetdate) 
select to_char(Source.START_DATE,'yyyy-mm-dd') from Source 
+0

实际上,当我直接插入值我得到这个错误。这就是为什么我做了这个转换 – user1751356

+0

所以这两个表具有相同的日期格式?你能告诉我源表格中的日期格式吗? – Mari

+1

好吧,让我更具体...我的源值的例子是11-JUN-13,我需要目标值为YYYY-MM-DD我该如何实现这一目标? – user1751356

1

"example of my source value is 11-JUN-13 and i need target value as YYYY-MM-DD how can i achieve this? "

所有的Oracle日期存储在相同的内部格式:

SQL> select dump(sysdate) from dual; 

DUMP(SYSDATE) 
--------------------------------------------- 
Typ=13 Len=8: 221,7,1,3,10,22,8,0 

SQL>  

显示日期完全取决于客户端环境的默认值,或者如果我们使用TO_CHAR(),则显示格式掩码。

如果您的两列都是DATE数据类型,那么您的操作过于复杂:您无需在INSERT中转换值。

insert into Target (Targetdate) 
select Source.START_DATE 
from Source 

您只需要在从Target中选择目标日期时应用格式掩码。