Inavlid метка времени Терадата - PullRequest
0 голосов
/ 21 января 2020

У меня Ship_Date как 14.12.2013 20:27 и определен как тип данных varachar в исходной таблице. Как я могу преобразовать это в формат отметки времени и загрузить как 14.12.2013 20: 27? Я использую CAST (SHIP_DATE AS TIMESTAMP (0) FORMAT 'MM / DD / YYYYHH: MI: SS') AS SHIP_DATE, но для терданных выдается неверная отметка времени. Пожалуйста, помогите решить проблему

Ответы [ 4 ]

2 голосов
/ 22 января 2020

Вы пропустили B, указывающее пробел / пробел в исходном составе. Но Teradata накладывает удушение на один месяц git. Вы можете добавить начальный ноль, используя RegEx:

Cast(RegExp_Replace(SHIP_DATE,'\b([\d])\b', '0\1') AS TIMESTAMP(0) FORMAT'dd/mm/yyyyBhh:mi')
1 голос
/ 24 января 2020

Проблема здесь заключается в пустом пространстве между 2013 и 20 и отсутствующими нулями в секундах. Я сделал, чтобы удалить место и конкатенацию, и это сработало.

SELECT
CAST (
( OREPLACE('12/14/2013 20:27', ' ','') ||':00')
AS TIMESTAMP(0) FORMAT 'MM/DD/YYYYHH:MI:SS'
) AS SHIP_DATE

И результат ниже:

enter image description here

1 голос
/ 21 января 2020

Проблема с вашим составом в том виде, в котором вы его написали, заключается в том, что вы говорите Teradata, что у вас есть секунды в строке, когда вы этого не делаете. Вы можете использовать:

select cast ('12/14/2014 20:27' as TIMESTAMP(0) FORMAT 'MM/DD/YYYYBHH:MI') 

Тем не менее, это все равно не будет обрабатываться один раз git месяцев.

1 голос
/ 21 января 2020

выберите to_timestamp ('12 / 14/2013 20:27 ',' MM / DD / YYYY HH24: MI ');

...