2017-06-05 75 views
0

我试图完成对语句的插入,但不断收到“无效日期”错误。2665 - Teradata中的无效日期错误

我创建语句:

CREATE MULTISET TABLE Date_Table, 
    NO FALLBACK , 
    NO BEFORE JOURNAL, 
    NO AFTER JOURNAL, 
    CHECKSUM = DEFAULT, 
    DEFAULT MERGEBLOCKRATIO 
    (
     customer_field, 
     date_field DATE FORMAT 'YYYY-MM-DD', 
     other_fields 
    ) 
PRIMARY INDEX (date_field); 

我的插入语句:

INSERT INTO Date_Table 
select 
    a.customer_field, 
    a.CAST (date_field AS DATE FORMAT 'yyyy-mm-dd'), 
    a.other_fields 
from a 

我试过到目前为止:

  • 使得date_fiel通过cast(null as date) as date_field
  • 检查在date_fieldsys_calendar.calendar每个日期d空,以确保它们是有效的日期
  • SELECT TYPE (date_field) FROM date_table GROUP BY 1检查类型,它们都变成是“日”型

任何想法?

+0

左加入<表格一>到sys_calendar,使用 = CALENDAR_DATE其中为空。这会告诉你,如果你有一些不是有效日期的值。 – Andrew

+0

如果消除INSERT并简单地运行SELECT,会发生什么情况?源表中列的数据类型是什么? –

+0

@Andrew,这就是我在第二个子弹中所尝试的。没有任何返回 –

回答

0

当您创建Date_Table时,您指定的数据类型是日期。可能是table a的数据类型是VARCHAR,这与Date_Table不匹配。这就是您无法运行INSERT声明的原因。我们可以去CAST

INSERT INTO Date_Table 
select 
    a.customer_field, 
    a.CAST (cast(date_field as varchar(8)) AS DATE FORMAT 'yyyy-mm-dd'), 
    a.other_fields 
from a 
+0

'varchar(8)'会截断日期,在这种情况下 – voidpro