gpt4 book ai didi

sql - PostgreSQL 中日期的数据类型

转载 作者:行者123 更新时间:2023-11-29 12:49:36 25 4
gpt4 key购买 nike

我已经从 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;

但这导致:

ERROR: date/time field value out of range: "26/07/19 5:48"
HINT: Perhaps you need a different "datestyle" setting.
CONTEXT: COPY ride_details, line 2, column created_at: "26/07/19 5:48"
SQL state: 22008

我是否需要指定不同的数据类型或如何使其工作?

最佳答案

COPY 对无效输入相当无情。 (这样它可以快速可靠。)

可能足以设置一个匹配 datestyle设置:

SET datestyle = 'ISO,DMY';  -- DMY being the relevant part

...然后重试。 (仅为您的 session 设置设置。)相关:

您问题中的信息并不完全清楚,您可能需要做更多:
复制到带有 text 列的临时“暂存”表,然后使用 to_date() 从那里 INSERT 到实际目标表 - 带有指定非标准日期格式的自定义模式:

CREATE TABLE public.ride_details(ride_id int,created_at date); -- target table

CREATE TABLE pg_temp.step1(ride_id int, created_at text); -- temporary staging table

COPY TO pg_temp.step1 ...;

INSERT INTO public.ride_details(ride_id, created_at)
SELECT ride_id, to_date(created_at, 'DD/MM/YY') -- or whatever
FROM pg_temp.step1;

to_date()忽略给定模式后的悬垂字符,因此我们不必处理您奇怪的 hmm 规范(hh?)。

我使用错误消息中显示的 YY 格式,而不是您在顶部声明的 yyyy。无论哪种方式,输入的格式都必须一致,否则您需要做更多,但...

全部在单个数据库 session 中,因为这是临时表的范围。临时表不会持久化,会在 session 结束时自动消失。我出于性能原因使用它。

否则,您需要一个普通表作为垫脚石,它在 session 中持久存在,并且可以在达到其目的后删除。

相关:

关于sql - PostgreSQL 中日期的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57598949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com