2014-11-04 159 views
0

我在创建时有一列定义为Date格式yyyy-mm-dd在teradata中将varchar(50)转换为日期格式'yyyy-mm-dd'?

我想从其中有一个列varchar(50)

在选择和插入到表中我得到这个错误

插入失败其他表插入数据。 2665:日期无效。

有人可以帮我铸造这个吗?

INSERT INTO TEMP_TABLES.FACT 
(

CUSTOMER_ACCOUNT_ID, 
LOB_START_DATE, 

) 

SEL 
CUSTOMER_ACCOUNT_ID, 
I.start_date as LOB_START_DATE, 

FROM #LOGIN I 

left join JOURNEY_TABLE.DOTCOM_DIM d1 
on I.PAGES = d1.PAGE_DESC 

这是存储在VARCHAR(50)字段日期的例子:2014年4月3日

在此先感谢

+1

你能发布实际的插入语句吗? – 2014-11-04 19:48:56

+0

您可以发布存储在VARCHAR(50)字段中的日期示例吗? – JNevill 2014-11-04 20:11:51

+0

存储为像这样2014-04-03 ... – Naveen 2014-11-04 20:27:12

回答

2

在情况下,将是有益的,这里有一个查询,应该允许您可以确定具有无效日期的行:

select 
* 
from 
#login t1 
left outer join sys_calendar.calendar t2 
on t1.start_date = cast (cast(t2.calendar_date as date format 'YYYY-MM-DD') as char(10)) 
where t2.calendar_date is null 

从此查询返回的任何行将具有无效日期。

2

我认为,所有你需要的是format声明

examples here

SEL 
CUSTOMER_ACCOUNT_ID, 
cast(((I.start_date (date, format 'yyyy-mm-dd'))(char(10))) as LOB_START_DATE, 
0

在较新版本的Teradata的存在TRYCAST()函数。如果转换失败,此函数将尝试转换数据并返回NULL,而不是使语句失败。

INSERT INTO TEMP_TABLES.FACT 
(
CUSTOMER_ACCOUNT_ID, 
LOB_START_DATE, 
) 
SELECT Customer_Account_ID 
    , TRYCAST(I.Start_Date AS DATE) AS LOB_START_DATE 
FROM #LOGIN I 
LEFT JOIN JOURNEY_TABLE.DOTCOM_DIM d1 
    ON I.Pages = d1.Page_Desc; 
相关问题