【发布时间】:2020-01-23 01:52:22
【问题描述】:
请原谅新手 POSTGRES 的问题,我对 MSMSQL 有点熟悉,但我可能也会在那里挣扎。
我有一个包含大约 1200 万行的 CSV,我正在尝试导入。其中一个字段是格式为 "YYYY-MM-DD HH:MM" 的日期字段。
我的表的字段类型设置为 TIMESTAMP(对吗?)。 CSV 导入失败,提示 “错误:日期/时间字段值超出范围:“2019-20-09 04:00””。
如何导入此类日期字符串?
我目前的陈述如下:
CREATE TABLE WoSWeatherGrids
(
id serial NOT NULL,
Location NUMERIC(6),
Date TIMESTAMP,
)
COPY WosWeatherGrids(Location,Date)
FROM '\\location\Weathergrids.csv' DELIMITER ',' CSV HEADER;
收到的错误是:
ERROR: date/time field value out of range: "2019-20-09 04:00"
HINT: Perhaps you need a different "datestyle" setting.
CONTEXT: COPY wosweathergrids, line 2, column date: "2019-20-09 04:00"
SQL state: 22008
我无法更改 CSV 中的字符串,因为这是一个从另一个软件的输出自动运行的过程,希望每天发生几次。我希望有一个简单的方法可以突出显示以允许我导入此字符串类型。
CSV 样本类型
Location,Date
1075,2019-20-09 04:00
1075,2019-20-09 05:00
1075,2019-20-09 06:00
1075,2019-20-09 07:00
编辑: 这个问题似乎源于 Postgres 不喜欢 YDM DateStyle 格式这一事实。原始系统之一是使用 MS SQL,而 T-SQL 可以处理它。我无法修改那个系统,所以仍然需要处理这个问题。
EDIT2: 根据文档here 我已经能够使用以下内容将示例 YYYY-DD-MM HH:SS 日期类型转换为我需要的日期类型。 select to_char(to_timestamp('2019-20-09 04:00', 'YYYY-DD-MM HH24:MI'), 'HH24:MI DD/MM/YYYY');。我仍然有些困惑,我需要了解如何从 CSV 的输入中执行此操作,或者如何创建一个临时表,然后创建一个适当的表并在途中进行转换。
【问题讨论】:
-
你的日期风格是什么?,你必须把日期风格改成 YDM,提示很清楚提示:也许你需要一个不同的“日期风格”设置
-
好收获。但是,显然,YDM 不是 postgres 中的日期样式。
ERROR: invalid value for parameter "DateStyle": "ISO, YDM"使用时SET datestyle to "ISO, YDM"
标签: database postgresql date import timestamp