将数据从一个表插入另一个表时,Teradata会执行自动类型转换。例如,如果将varchar
插入date
字段,Teradata
会将varchar
转换为date
。如果所有varchars看起来都像有效的日期字符串,这就完美了。
但是,当Teradata
遇到varchar
看起来不像有效的date
时,它就无法投射,因此显示错误。我如何强制dirty insert
?我希望Teradata
插入NULL,如果它无法转换(默默地忽略错误)
有没有办法做到这一点?
答案 0 :(得分:1)
您可以尝试使用日历表。其中一些将取决于您的数据结构,但基本上:
insert into <your destination table>
select
<t1.columns>,
t2.calendar_date
from <your table> t1
left join sys_calendar.calendar t2
on t1.<your character date column> = cast (cast(t2.calendar_date as
date format 'YYYY-MM-DD') as char(10))
格式化取决于列的实际外观。
您可以从日历表中插入calendar_date列,而不是从源表中插入列。如果源表中的日期无效,则会插入空值。