在 DATEFORMAT 和 TIMEFORMAT 中使用自动识别 - Amazon Redshift

在 DATEFORMAT 和 TIMEFORMAT 中使用自动识别

如果您指定 'auto' 作为 DATEFORMAT 或 TIMEFORMAT 参数的参数,Amazon Redshift 将自动识别并转换源数据中的日期格式或时间格式。下面是一个示例。

copy favoritemovies from 'dynamodb://ProductCatalog' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' dateformat 'auto';

在与 DATEFORMAT 和 TIMEFORMAT 的 'auto' 参数一起使用时,COPY 将识别并转换在 DATEFORMAT 和 TIMEFORMAT 字符串 中的表中列出的日期和时间格式。此外,'auto' 参数将识别下列在使用 DATEFORMAT 和 TIMEFORMAT 字符串时不受支持的格式。

格式 有效输入字符串的示例
ISO 8601 2019-02-11T05:09:12.195Z
Julian J2451187
BC Jan-08-95 BC
YYYYMMDD HHMISS 19960108 040809
YYMMDD HHMISS 960108 040809
YYYY.DDD 1996.008
YYYY-MM-DD HH:MI:SS.SSS 1996-01-08 04:05:06.789
DD Mon HH:MI:SS YYYY TZ 17 Dec 07:37:16 1997 PST
MM/DD/YYYY HH:MI:SS.SS TZ 12/17/1997 07:37:16.00 PST
YYYY-MM-DD HH:MI:SS+/-TZ 1997-12-17 07:37:16-08
DD.MM.YYYY HH:MI:SS TZ 12.17.1997 07:37:16.00 PST

自动识别不支持 epochsec 和 epochmillisec。

要测试是否将自动转换日期或时间戳值,请使用 CAST 函数尝试将字符串转换为日期或时间戳值。例如,下列命令测试时间戳值 'J2345678 04:05:06.789'

create table formattest (test char(21)); insert into formattest values('J2345678 04:05:06.789'); select test, cast(test as timestamp) as timestamp, cast(test as date) as date from formattest; test | timestamp | date ----------------------+---------------------+------------ J2345678 04:05:06.789 1710-02-23 04:05:06 1710-02-23

如果 DATE 列的源数据包含时间信息,则将截断时间部分。如果 TIMESTAMP 列的源数据省略时间信息,则将使用 00:00:00 作为时间部分。