Есть ли опция или настройка, которая сообщит Netezza о игнорировании недопустимых дат? Весь INSERT не работает в примере ниже, потому что в третьей строке исходной таблицы указана неверная дата. Я ожидал бы, что оскорбительная строка может быть пропущена, но вставить нулевые строки кажется немного экстремальным.Netezza INSERT - игнорировать недопустимые даты?
Я пробовал следующее, но это не удалось. Альтернативой является разбор даты источника и проверки каждого компонента для действия (в том числе дней/месяц, високосные годы и т.д ..)
insert into db.test (cmclmn, effdt, efftm)
select cmclmn, case when to_date(effdt,'yyyymmdd') is null
then null
else to_date(effdt,'yyyymmdd') end,
cast(lpad(efftm,6,0) as time) as efftm
from db.test_src
;
Весь сценарий:
CREATE TABLE db.test
(
cmclmn integer,
effdt date,
efftm time
)
DISTRIBUTE ON (cmclmn);
drop table db.test_src;
create table db.test_src
(
cmclmn integer,
effdt integer,
efftm integer)
distribute on (cmclmn);
insert into db.test_src (cmclmn, effdt, efftm) values (1,20140120, 102000);
insert into db.test_src (cmclmn, effdt, efftm) values (2,20140121, 231212);
insert into db.test_src (cmclmn, effdt, efftm) values (3,0,111111);
insert into db.test_src (cmclmn, effdt, efftm) values (4,2014,90909);
insert into db.test (cmclmn, effdt, efftm)
select cmclmn, to_date(effdt,'yyyymmdd'), cast(lpad(efftm,6,0) as time) as efftm
from db.test_src
;