在 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 作为时间部分。