2016-02-01 3 views
0

Контекст Teradata SQL AssistantTeradata SQL Assistant Дата Вставки

успешно создали следующую таблицу:

CREATE VOLATILE TABLE RSN_WEEKLY_TMP, NO LOG 
(
EXPLICIT_DATE DATE FORMAT 'MM/DD/YYYY' 
) 
PRIMARY INDEX (EXPLICIT_DATE) 
ON COMMIT PRESERVE ROWS; 

1) Следующий INSERT успешно работает:

INSERT INTO JOCOOPER.RSN_WEEKLY_TMP (EXPLICIT_DATE) VALUES (CURRENT_DATE); 

2) Следующие INSERT не работает и возвращается с ошибкой: INSERT Failed [26665] Недействительная дата.

INSERT INTO JOCOOPER.RSN_WEEKLY_TMP (EXPLICIT_DATE) VALUES (02/02/2016); 

3) Однако, если я использую строку «дата значение» и брось в качестве даты он работает.

INSERT INTO JOCOOPER.RSN_WEEKLY_TMP (EXPLICIT_DATE) VALUES (CAST('02/03/2016' AS DATE FORMAT 'MM/DD/YYYY')); 

Мне нужно знать, как сделать пример # 2 работы? Пожалуйста, порекомендуйте?

ответ

1

02/02/2016 - расчет INTEGER, разделяющий 2 на 2 к 2016 году, приводит к нулю, конечно, это недействительная дата.

CAST('02/03/2016' AS DATE FORMAT 'MM/DD/YYYY') работает, потому что он сообщает парсеру, как преобразовать строку в DATE.

только рекомендовал (и самый короткий) путем является стандартным SQL DATE буквальным:

DATE '2016-02-03' 

Вы никогда не должны думать о форматах, потому что есть только один: YYYY-MM-DD

0

На самом деле, этот формат тоже работает

insert into datecol select '2015/12/31'; 

В вашем примере:

CREATE VOLATILE TABLE RSN_WEEKLY_TMP, NO LOG 
(
--EXPLICIT_DATE DATE FORMAT 'MM/DD/YYYY' 
EXPLICIT_DATE DATE 
) 
PRIMARY INDEX (EXPLICIT_DATE) 
ON COMMIT PRESERVE ROWS; 

INSERT INTO RSN_WEEKLY_TMP (EXPLICIT_DATE) select '2016/02/02';