Формат даты загрузки оператора Redshift COPY с двухзначным годом (мм / дд / гг)

У меня есть файл источника данных, который я загружаю в Redshift с помощью команды COPY.

В файле есть несколько столбцов с датой в двухзначном формате года (я знаю, здесь я имею дело с динозаврами).

Redshift распознает формат даты, но проблема в том, что файл имеет такие значения, как:

06/01/79 

что на самом деле означает:

2079-06-01

однако Redshift интерпретирует это как:

1979-06-01

Есть ли способ сообщить Redshift, какой у меня порог для двузначных форматов даты. Например, значения ниже 90 следует интерпретировать как 20XX.

Параметр DATEFORMAT в команде COPY не имеет такой опции.

1 ответ

-- Begin transaction
BEGIN TRANS;
--  Create a temp table
CREATE TEMP TABLE my_temp (dtm_str CHAR(8));
-- Load your data into the temp table
COPY my_temp FROM s3://my_bucket … ;
-- Insert your data into the final table
INSERT INTO final_table
-- Grab the first 6 chars and concatenate to the following
SELECT CAST(LEFT(dtm_str,6)||
-- Convert the last 2 chars to and in and compare to your threshold
       CASE WHEN CAST(RIGHT(dtm_str,2) AS INT) < 85
-- Add either 1900 or 2000 to the INT, convert to CHAR
            THEN CAST(CAST(RIGHT(dtm_str,2) AS INT) + 2000 AS CHAR(4))
       ELSE CAST(CAST(RIGHT(dtm_str,2) AS INT) + 1900 AS CHAR(4)) END
-- Convert the final CHAR to a DATE
       AS DATE) new_dtm
FROM my_temp;
COMMIT;
Другие вопросы по тегам