2014-11-04 282 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; 
相關問題