我在创建时将列定义为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
提前致谢
答案 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
声明
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;