我从Excel中导出了一个CSV文件,其日期格式为ddmmyyyy hmm。我使用COPY
函数导入到PostgreSQL中的一个表中。
因为我只想保留日期部分,所以我尝试了**date
**数据类型:
CREATE TABLE Public."ride_details"(ride_id int,created_at date)
COPY Public."ride_details" FROM '/tmp/ride_details.csv' DELIMITER ',' csv HEADER;
字符串
但这导致了:
错误:日期/时间字段值超出范围:“26/07/19 5:48”
提示:您可能需要一个不同的“日期样式”设置。
CONTEXT:COPY ride_details,line 2,column created_at:“26/07/19 5:48”
SQL状态:
我是否需要指定不同的数据类型或如何使其工作?
1条答案
按热度按时间iqih9akk1#
COPY
对于无效输入是相当不宽容的。(这样它可以快速可靠。)它***可能***足以设置匹配的
datestyle
设置:字符串
.并重试。(仅为您的会话设置设置。)相关信息:
您的问题中的信息不完全清楚,您可能需要做更多工作:
使用
to_date()
复制到一个临时的“staging”表中,然后使用to_date()
将INSERT
复制到实际的目标表中-使用自定义模式指定您的非标准日期格式:型
to_date()
忽略给定模式后的悬空字符,所以我们不必处理奇怪的hmm
规范(hh
?)。我使用了错误消息中显示的
YY
,而不是你在顶部声称的yyyy
。无论哪种方式,输入必须是 * 一致的 * 格式,或者你需要做更多的工作,然而...所有这些都在单个DB会话中完成,因为这是临时表的作用域。临时表没有持久化,并且在会话结束时自动死亡。我使用它是出于性能原因。
否则,您需要一个普通表作为垫脚石,它在会话之间持久化,并且可以在完成其目的后删除。
相关: