如何解决当我在引号或混合数据中加数字时,如何正确确定数据类型?
我知道这是一个非常简单的问题,但是我不能再进一步了。我想将数据从csv文件导入PostgreSQL。我已经创建了一个表,一个名称列,因为它们在文件中被命名,我遇到的第一个问题是我不知道数据类型。我的意思是在我打开CSV文件时在第一栏中有这样的内容:
"COLUMN1";"COLUMN2";"COLUMN3";"COLUMN4"
"009910";NA;NA;"FALSE"
"953308";0;41;"TRUE"
"936540";NA;NA;"FALSE"
"902346";1;5;"TRUE"
"747665";NA;NA;"FALSE"
"074554";NA;NA;"FALSE"
"154572";NA;NA;"FALSE"
当我通过pgAdmin 4导入此库时,其返回错误为数据类型。我将column2设置为Integer,但有点“混合”。我也将列1设置为整数,但数字用引号引起来,所以我想知道PostgreSQL是否将其视为字符串。第4列也是一样。如何正确确定每一列的数据类型?
解决方法
在导入过程中,如果可能,它将值转换为列的类型。
例如,如果您执行SELECT 'FALSE'::boolean
,它将强制转换并返回false
。 SELECT '074554'::int
也可以正常工作并返回74554
。
但是裸字符NA
会给您带来麻烦。如果打算将这些文件用作null
,请尝试在文件上进行查找/替换并将其取出,以使第一行数据具有"009910";;;"FALSE"
并查看是否可行。
您还可以将所有列都作为文本,引用NA
值,然后导入。
然后创建一个新表,并使用全文本表中的INSERT INTO ... SELECT
并根据需要手动进行强制转换或使用CASE
来转换类型。
例如,如果您导入到名为raw_data
的表中,并且有一个更好的表imports
:
INSERT INTO imports
SELECT
column1::int,CASE WHEN column2 = 'NA' THEN null ELSE column2::int END,CASE WHEN column3 = 'NA' THEN null ELSE column3::int END,column4::boolean
FROM
raw_data
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。