将excel日期序列转换为postgres中的日期

Gus*_*Gus 3 postgresql excel date

因此,我有大量格式不正确的 excel 文件,因此它们的日期没有作为日期读取,而是作为它们使用的日期序列(我认为自 1900-1 以来的天数) -1?)。例如:41917.0054050926 真的是 10/5/2014 12:07:47 AM。

我需要的只是实际日期,而不是时间。我知道我可以通过执行 41917/365.25,四舍五入并将其添加到 1900 来获得年份,但我不确定如何获得日期和月份。postgres 中是否有任何内置的东西来处理这个问题?如果没有,有没有人知道找到日期和年份的算术方法?

谢谢!

Bra*_*ews 5

我刚刚遇到了这个问题并编写了一个 plpgsql 函数来处理它。请注意,它仅适用于整数,这意味着它仅适用于日期,而不适用于日期和时间。其他人可以随意扩展它。

CREATE OR REPLACE FUNCTION To_Timestamp_From_Excel (ExcelDate integer)
RETURNS timestamp without time zone AS $$
BEGIN
   IF ExcelDate > 59 THEN
    ExcelDate = ExcelDate - 1;
   END IF;
   RETURN date '1899-12-31' + ExcelDate;
END;
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

如果您对日期和时间进行了编码,或者您的字段类型是文本,则需要像这样调用它:

UPDATE myTable set MyDateField = to_Timestamp_From_Excel(MyDateField::integer)
Run Code Online (Sandbox Code Playgroud)


Gar*_*ent 0

有了A1 中的数据,B1中输入:

=ROUND(A1,0)+1
Run Code Online (Sandbox Code Playgroud)

并将B1格式设置为mm/dd/yyyy

例如:

在此输入图像描述