Sql 操作列的数据

Sql 操作列的数据,sql,postgresql,Sql,Postgresql,我有一个CSV文件,包含大约3000万行,其中一列有日期类型。但问题在于它的格式。PSQL支持时间戳的“-”分隔符,但我的日期使用“/”。例如,日期应为“2021-02-01 00:00:00”,但我的日期格式为“2021/02/01 00:00”。此外,我无法打开CSV文件并手动更改它,因为它太大了。我正在尝试将数据导入一个临时表,用“-”替换“/”,然后将它们插入到一个新表中,我正在使用以下命令(它不是真正的表,只是一个示例): 当我想运行replace函数时,它出现了一个错误。 有人知道我

我有一个CSV文件,包含大约3000万行,其中一列有日期类型。但问题在于它的格式。PSQL支持时间戳的“-”分隔符,但我的日期使用“/”。例如,日期应为“2021-02-01 00:00:00”,但我的日期格式为“2021/02/01 00:00”。此外,我无法打开CSV文件并手动更改它,因为它太大了。我正在尝试将数据导入一个临时表,用“-”替换“/”,然后将它们插入到一个新表中,我正在使用以下命令(它不是真正的表,只是一个示例):

当我想运行replace函数时,它出现了一个错误。 有人知道我怎样才能解决这个问题吗?甚至可以操作原始表中的列吗?

试试这个, 在本例中,列“dt”的类型为timestamp,不带时区,但表达式的类型为text。因此,文本应转换为时间戳,如下所示

CREATE TABLE IF NOT EXISTS TMP
(
    dt VARCHAR
);

CREATE TABLE IF NOT EXISTS other_tmp
(
    dt TIMESTAMP
);

INSERT INTO TMP
VALUES ('2020/01/02 22:33:11'::TIMESTAMP);

INSERT INTO other_tmp(dt)
SELECT REPLACE(dt, '/', '-')::TIMESTAMP AS dt
FROM TMP;
试试这个, 在本例中,列“dt”的类型为timestamp,不带时区,但表达式的类型为text。因此,文本应转换为时间戳,如下所示

CREATE TABLE IF NOT EXISTS TMP
(
    dt VARCHAR
);

CREATE TABLE IF NOT EXISTS other_tmp
(
    dt TIMESTAMP
);

INSERT INTO TMP
VALUES ('2020/01/02 22:33:11'::TIMESTAMP);

INSERT INTO other_tmp(dt)
SELECT REPLACE(dt, '/', '-')::TIMESTAMP AS dt
FROM TMP;

第一个错误是,选择列表中有两列,但插入目标中只有一列

要将字符串转换为时间戳,请使用
To_timstamp()


第一个错误是,选择列表中有两列,但插入目标中只有一列

要将字符串转换为时间戳,请使用
To_timstamp()


我试过了,但它抛出了一个错误,并给出了以下提示:您需要重写或强制转换表达式。@MasoudAkbari更新,是的,您需要将其强制转换到时间点。是的,它成功了,谢谢。此答案具有误导性,过于复杂。重要的一点是,
'2020/01/02 22:33:11'
是一种完全有效的时间戳格式。在上述任何一种情况下,您所要做的就是
插入TMP值('2020/01/02 22:33:11')我试过了,但它抛出了一个错误并给出了以下提示:您需要重写或强制转换表达式。@MasoudAkbari更新,是的,您需要将其强制转换为时间戳。是的,它成功了,谢谢。此答案具有误导性,过于复杂。重要的一点是,
'2020/01/02 22:33:11'
是一种完全有效的时间戳格式。在上述任何一种情况下,您所要做的就是
插入TMP值('2020/01/02 22:33:11')
Your
select
返回两列,但插入到一列中。我认为这是一个打印错误。格式化是错误的:<代码>选择“2021 / 02 / 01:00:00”::时间戳;2021-02-01 00:00:00
。正如其他人所指出的,问题是试图将两列压缩为一列。您的
select
返回两列,但您正在插入一列。我认为这是一个打印错误。格式化是错误的:<代码>选择“2021 / 02 / 01:00:00”::时间戳;2021-02-01 00:00:00。正如其他人所指出的,这个问题是试图将两列挤成一列。
insert into other_tmp(dt)
select to_timestamp(dt, 'yyyy/mm/dd hh24:mi:ss')
from tmp;