将varchar(50)转换为日期格式' yyyy-mm-dd'在teradata?

时间:2014-11-04 19:45:28

标签: teradata

我在创建时将列定义为Date格式yyyy-mm-dd

我想从其他表中插入具有该列varchar(50)

的数据

在选择并插入表格时,我收到了此错误

  

INSERT失败。 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-04-03

提前致谢

3 个答案:

答案 0 :(得分: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

从此查询返回的任何行都将包含无效日期。

答案 1 :(得分:2)

我认为您需要的只是format声明

examples here

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

答案 2 :(得分: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;