我有一个数据集(以.tsv格式)其中一列是出生日期。但是,数据是旧的,并不是所有的日期格式都是YYYY-MM-DD
。有些参赛作品的出生年份(出生月份和出生日期均已丢失),格式为YYYY-##-##
(字面上##
已插入数据,只有已知年份)。我希望将此数据集加载到我的postgres数据库中,其中出生日期列的数据类型为date
,而不是string
,以便我可以对日期进行比较。
下面显示了一个小样本。 (数据的不相关的列未示出)Postgresql日期格式
1924-##-##
1965-09-04
1944-11-05
1951-##-##
-388-##-##
1893-01-26
1037-##-##
直接批量加载数据集明显给出错误
ERROR: invalid input syntax for type date: "1924-##-##"
LINE 1: insert into d values ('1924-##-##');
^
对数据集进行相当大的,具有约6亿卢比条目。目前我正在考虑运行一个脚本,用01
替换这些##
的脚本,然后将修改后的数据插入到数据库中。但我不喜欢这个想法 -
- 这是非常耗时的。
- 这是磁盘空间消耗(因为我想保留原始的“umtampered”数据)
- 此外,并非所有的数据在我的数据库中都是真实的。
有没有什么办法可以让postgres以某种方式把日期变成现实,只是忽略了##(s)(并且只保留了几个月和几天都没有的年份)呢?
或者有没有更好的解决方案来解决这个问题?
Upvoted但只是一个小附记,你实际上并没有存储date_parsed。你可以做一些类似table的方法,然后限制它的输出,所以你知道你的输入日期总是被解析。有关表格方法的更多信息,请参阅我写的这篇博客文章:http://ledgersmbdev.blogspot.com/2012/08/postgresql-or-modelling-part-2-intro-to.html – 2012-09-08 05:15:35